2012-04-13 1 views
2

Собственно два вопроса:Как сделать сокращенное if-then в jQuery? Являются ли эти цепочки?

Мне нравится стенографии IF-ELSE в jQuery так:

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") 

Теперь это было бы хорошо, не так ли? Это возможно?

+12

'вар некоторые == верно? «это правда»: «это ложь»; 'javascript not jquery –

+1

Зачем вам его цепочки?Просто заверните последние строки в if-statement. –

+0

@AnishGupta - правильный. Я отметил его жестким – frequent

ответ

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'); 
+0

Вот что я искал. Большое спасибо! – frequent

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") 
+1

Это не делает то же самое. Это возвращает 'true', если' some == true' и '' it true '' в противном случае. –

+0

, который [даже не работает] (http://jsfiddle.net/NjcRt/) вообще (двойной эквивалент? Серьезно?) – Joseph

+0

Не имеет смысла; вы всегда присваиваете 'some'' true'. –

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, вероятно, лучше использовать переключатель/case.

+2

Операторы 'var' - это операторы, но не выражения, поэтому они не могут находиться внутри тернарного оператора. –

+2

@DelanAzabani - Ваше право, немного, чтобы много копировать/вставлять. Починил это! – adeneo