2

其实有两个问题:

我喜欢jQuery中的简写IF-ELSE,如下所示:

var some == true ? "it's true" : "it's false";   

是否有相应的IF-THEN,因为:

   var some == true ? "it's true" 

似乎不起作用。

另外,这样的东西可以在常规 jQuery 中链接吗?像这样:

  some.addClass("hello")
      .find(".other").css("width","100px").end()
      // chained if
      .hasClass("one") ? some.css("border","1px solid red")
      .removeClass("hello")

现在那会很好,不是吗?这可能吗?

4

3 回答 3

4

那会做(赋值使用一个=,两个用于条件),但如果第一个是真的,就像你发布的那样,有些总是真的。

var some = true || "it's true"; 

不,您的示例不可链接,但您可以替换您的 hasClass ,filter('.one')如果存在包含第一个类的元素,它将继续链接:

some.addClass("hello")
      .find(".other").css("width","100px").end()
      .filter('.one').css("border","1px solid red")
      .removeClass("hello")
于 2012-04-13T12:02:01.560 回答
4

您所引用的简写 IF/ELSE 称为三元运算符,它不能像 IF/ELSE 语句那样链接,也不能作为 jQuery 方法链接,并且它的使用有一些限制,你可以但是将一个放在另一个里面,如下所示:

some == true ? someMore == true ? "it's true" : "it's false" : "it's false";

你也可以这样做:

some == true ? "it's true" : null;
//or
some == true ? "it's true" : undefined;

这会返回一些东西,所以通常它是这样使用的:

var some = someVar==true ? "it's true" : "it's false";

换句话说,你可以这样做:

var some = $(some).length ? 
             $(some).is('.one') ?
               some //some exists and have the class .one
             :
               return someOtherVar or function //some does not have the class .one
           :
             undefined //some does not have a length
           ;

你也可以做类似的事情,并且有许多不同的方式来使用三元:

$(div)[somevar==true ? fadeIn : fadeOut](300);

除此之外,当有很多东西来执行 if/else 通常更合适,并且如果进行大量 if/else/elseif 检查,则 switch/case 可能会更好。

于 2012-04-13T12:18:22.017 回答
0

有几个插件可以让你if在 jQuery 中链接逻辑 -

http://outwestmedia.com/jquery-plugins/conditional/

$('div')
    .If('hasClass', 'myClass')
        .css('color', 'red')
    .Else('hasClass', 'anotherClass')
        .css('color', 'green')
    .Else()
        .css('color', 'blue');

http://benalman.com/projects/jquery-iff-plugin/

function my_test( x ) {
  return x === 'bar';
};

$('div')
  .append( '1' )
  .iff( my_test, 'foo' )
    .append( '2' )
    .end()
  .append( '3' );
于 2012-04-13T12:39:59.720 回答