我很好奇,为什么jQuery的表达带有||的jQuery简单表达式但不明结果
$("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");
回报[]
如果: .myitem1
不存在于页面上。另外,$("#mydiv").find(".myitem2")
确实存在,结果是一个非空对象。
我希望得到的结果是第一个表达式,如果它存在,否则第二个表达式。如您所见,我使用||
。我究竟做错了什么?
我很好奇,为什么jQuery的表达带有||的jQuery简单表达式但不明结果
$("#mydiv").find(".myitem1") || $("#mydiv").find(".myitem2");
回报[]
如果: .myitem1
不存在于页面上。另外,$("#mydiv").find(".myitem2")
确实存在,结果是一个非空对象。
我希望得到的结果是第一个表达式,如果它存在,否则第二个表达式。如您所见,我使用||
。我究竟做错了什么?
的失败的原因都在评论,但是,鉴于您正在尝试,为什么不使用这个(如果它们在顺序页)逻辑的解释:
$("#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代码返回一个空字符串,而不会给出错误。
谢谢大家可能的解决方案。我找到$(“#mydiv”)。find(“。myitem1,.myitem2”)。first();最好的,因为它很短,清晰,不会使用两次选择器,这就是我需要的。谢谢大家。 – Haradzieniec 2014-09-24 13:25:37
'.find()'总是返回一个jQuery集合(不是数组),它们都是*从不*虚假。 – Bergi 2014-09-24 13:02:22
你将不得不在这里使用三元运算符$(“#mydiv”)。find(“。myitem1”)。length? $(“#mydiv”)。find(“。myitem1”):$(“#mydiv”)。find(“。myitem2”);' - 如果可能的话缓存'$(“#mydiv”)的值。 (“.myitem1”)' – 2014-09-24 13:04:54
@Arun P Johny:这是一个你不应该推荐三元的地方,因为你运行初始选择器两次。缓存它是一个好主意。也许最好用一个简单的'if' :) – 2014-09-24 13:19:22