jQuery简单表达式与||但结果不明确

时间:2014-09-24 13:00:22

标签: javascript jquery boolean expression boolean-operations

我很好奇为什么jQuery表达式

如果符合以下条件,

$("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");会返回[]:  .myitem1在页面上不存在。此外,$("#mydiv").find(".myitem2") DOES存在,结果是非空对象。

我希望得到的结果是第一个表达式,如果它存在,否则是第二个表达式。如你所见,我使用||。我做错了什么?

1 个答案:

答案 0 :(得分:1)

它失败的原因的解释在评论中,但是,考虑到你正在尝试的逻辑,为什么不使用它(如果它们按顺序在页面中):

 $("#mydiv").find(".myitem1,.myitem2").first();

否则使用:

var $result = $("#mydiv").find(".myitem1");
if (!$result.length){
    $result = $("#mydiv").find(".myitem2");
}

不要使用三元表达式,因为它将运行第一个选择器两次。使用这样的三元组:

var $result = $("#mydiv").find(".myitem1");
$result = $result.length ? $result : $("#mydiv").find(".myitem2");

您当前的代码假定find如果找不到匹配则不返回任何内容,但这不是jQuery允许链接方法的方式。它总会返回一个jQuery对象(只是一个没有匹配的空对象)。这允许像$('#youCantMatchThis').text();这样的jQuery代码返回一个空字符串而不会出错。