是否有一个jQuery函数来“快捷”if / else开关?

时间:2012-04-25 14:43:38

标签: javascript jquery

在jQuery代码中编写if / else语句感觉不对:

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

是否有类似的内容:

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

4 个答案:

答案 0 :(得分:9)

  

是否有类似的内容:

现在有!

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

http://jsfiddle.net/alnitak/n2CLZ/

的工作演示

答案 1 :(得分:2)

据我所知不...但你可以在短期条件下使用三元运算符

示例:

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

编辑:使用功能时

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

答案 2 :(得分:0)

根本不需要您使用的示例,因为如果没有选择任何元素,则调用的方法不会执行任何操作。

我想不出这样一种情况,即在jQuery链的中间有一个if语句,而不是像过滤器方法或每个方法那样。

<强>更新

我从可用性的角度来看这个。比较以下两种情况:

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

VS

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

也许jQuery方法对你来说更容易阅读,对我来说它大致相同。为我杀死它的部分是jQuery方法只能检查长度,除非你在插件中添加一个布尔参数和更多逻辑,而使用if语句你只需更改条件。

如果插件接受了条件,它将最终执行this.each并检查每个元素的条件,但是您传入的条件必须是返回true或{的函数{1}}给定元素。有点像现有的false方法。

<强>更新

为了完整性,这里有一个小提琴,比较接受条件函数的插件和使用.filterhttp://jsfiddle.net/fdYSx/2/

我认为它不再具有可读性或易于使用。

答案 3 :(得分:0)

注意事项:

if / else语句是:

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

然而,开关是:

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

if else的简短版本是单行语法:

if(someCondition)
  //dosomething
else
  //dosomethingelse

更短的版本是三元运算符

someoutput = (someCondition) ? doTrue : doFalse

Jquery还没有真正开始尝试进一步简化这些已经很短的检查条件的方法,但由于jquery可以像任何其他javascript一样扩展,如果你需要一个jquery本机函数,只需写一个$命名空间