0

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

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

有没有类似的东西:

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

4 回答 4

9

有没有类似的东西:

有,现在!

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

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

于 2012-04-25T14:47:56.650 回答
2

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

例子:

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

编辑:使用函数时

$("#test").length ? (function() { console.log("#test available"); })() : (function() { console.log("#test not available"); })();
于 2012-04-25T14:46:10.750 回答
0

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

我想不出在 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检查每个元素的条件,但是你传入的条件必须是一个返回给定元素true的函数。false有点像已经存在的.filter方法。

更新

为了完整起见,这里将接受条件函数的插件与 using 进行比较$.fn.eachhttp://jsfiddle.net/fdYSx/2/

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

于 2012-04-25T14:48:34.093 回答
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 本机函数,只需将一个写入$命名空间

于 2012-04-25T14:51:16.757 回答