我很好奇为什么jQuery表达式
如果符合以下条件, $("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");
会返回[]
:
.myitem1
在页面上不存在。此外,$("#mydiv").find(".myitem2")
DOES存在,结果是非空对象。
我希望得到的结果是第一个表达式,如果它存在,否则是第二个表达式。如你所见,我使用||
。我做错了什么?
答案 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代码返回一个空字符串而不会出错。