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

Is there a jQuery function to "shortcut" a if/else switch?

本文关键字:快捷方式 if else 开关 有一个 jQuery 函数 是否      更新时间:2023-09-26

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

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

是否有类似于以下内容的内容:

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

是否有类似于以下内容的内容:

有,现在!

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

http://jsfiddle.net/alnitak/n2CLZ/的工作演示

我所知没有...但是您可以在短条件下使用三元运算符

例:

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

编辑:使用函数时

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

注意事项:

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本机函数,只需将一个写入$命名空间

即可。
根本不

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

我想不出在jQuery链中间有一个if语句是有意义的,而不是在诸如过滤器方法或每个方法之类的东西中。

更新

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

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并检查每个元素的条件,但是您传入的条件必须是为给定元素返回truefalse的函数。有点像已经存在的.filter方法。

更新

为了完整起见,这里有一个小提琴,将接受条件函数的插件与使用 $.fn.each 进行比较。 http://jsfiddle.net/fdYSx/2/

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