2012-04-25 3 views
0

письменной форме, если/иначе в середине JQuery кода не чувствует себя хорошо:Есть ли функция jQuery для «быстрого вызова» переключателя if/else?

if ($("#test").length) { 
    // do smth 
} 
else { 
    // do smth else 
} 

Есть ли что-то подобное:

$("#test").test(function(){ 
    // do smth 
}, 
function(){ 
    // do smth else 
}); 
+3

Это зависит от того, что вы делаете. Что делаешь? – LeonardChallis

+0

Вы всегда можете сделать $("#test").length ? (function() { })() : (function() { })(); slowpoison

+2

** jQuery - это javascript ** ... – gdoron

ответ

9

Есть ли что-то подобное:

Существует, сейчас

(function($) { 
    $.fn.test = function(a, b) { 
     (this.length ? a : b).apply(this); 
     return this; 
    }; 
})(jQuery); 

Работа демо на http://jsfiddle.net/alnitak/n2CLZ/

+0

хорошая идея настроить его как новый метод jQuery :) –

+0

+1 Вот о чем я говорю, очень приятно. Это было бы очень полезно. – iambriansreed

+0

интересно, что вы используете тернарный оператор внутри функции, предназначенной для создания «более короткой, если еще» функции. но +1 для хорошего ответа – Kristian

2

, насколько я знаю, нет ... но вы можно использовать тройные операторы для коротких условий

пример:

var foo = $("#test").length ? "bar" : "baz"; 

EDIT: при использовании функции

$("#test").length ? (function() { console.log("#test available"); })() : (function() { console.log("#test not available"); })(); 
+0

+1 Но эта тройная функция со встроенными функциями мне не подходит. ;) – iambriansreed

+0

меня тоже ... я бы никогда не использовал его;) но это сработало бы –

0

На примере вы использовали бы не нужен вообще, так как если не выбраны элементы, методы называются не делать ничего.

Я не могу представить себе ситуацию, когда было бы целесообразно иметь оператор if в середине цепочки jQuery, кроме как внутри чего-либо, например, метода фильтра или каждого метода.

Update

Я смотрю на это с точки применяемости зрения. Сравните эти две ситуации:

if ($(".div").length) { 
    console.log("We found divs"); 
} else { 
    console.log("We did not find div"); 
} 

против

$(".div").test(function(){ 
    console.log("We found divs"); 
},function(){ 
    console.log("We did not find divs"); 
});​ 

Может быть, метод JQuery легче читать для вас, для меня это примерно такой же. Часть, которая убивает его для меня, это тот факт, что метод jQuery может проверять длину, если вы не добавите логический параметр и больше логики внутри плагина, в то время как оператор if просто изменит условное выражение.

Если плагин принят условный, он будет в конечном итоге делает this.each и проверять состояние каждого элемента, однако условная, что вы передаете должны быть функцией, которая возвращает true или false для данного элемента. Как будто уже существующий метод .filter.

Update

Для полноты, вот скрипка сравнения плагина, который принимает условие функцию с помощью $.fn.each. http://jsfiddle.net/fdYSx/2/

Я не думаю, что это более читаемый или более простой в использовании.

0

Things отметить:

в если/другое заявление является:

if(condition) 
{ 
    //something 
} else { 
    //something 
} 

а коммутатор является:

switch(someVal) { 
    case 'valEqualsThis': 
    //do something 
    break; 
} 

короткий вариант, если еще синтаксис одной строки :

if(someCondition) 
    //dosomething 
else 
    //dosomethingelse 

еще сокращенный вариант, который является тройным оператором

someoutput = (someCondition) ? doTrue : doFalse 

Jquery не действительно получил в бизнес (пока) в попытке еще больше упростить эти уже короткие пути проверки условий, но так как JQuery является расширяемым, как и любым другими javascript, если вам нужна функция jquery native, просто напишите ее в поле $

Смежные вопросы