找到匹配选择器的元素的最有效方法是什么?它不在给定的DOM节点内部(即我传递了节点,并且不一定推导出一个匹配它的选择器) 。到目前为止我已经
了var inputs = $("input").filter(function() {
return !$(excludedNode).has(this).length;
});
但不禁想到可能有更好的解决方案,因为尽管代码不是很多,但我怀疑它是非常有效的。
答案 0 :(得分:2)
这个怎么样:
var inputs = $("input").filter(function() {
return $(this).closest(excludedNode).length == 0
//or:
return !$(this).closest(excludedNode).length
});
找到您想要的元素,然后检查它是否具有excludedNode
答案 1 :(得分:2)
我设置了a jsperf来测试其他人提出的有效建议以及另外一个想法。
令人惊讶的是,使用$.has
的方法比使用$.closest
快3倍(因为它委托给浏览器document.element.contains
,而$.closest
做了一些选择器操作和遍历DOM树)。它的速度也比$("div").not("#" + id + " *")
快得多。
所以最快的方法是
$("input").filter(function() {
return !$(excludedNode).has(this).length;
});
并且使用直觉感觉最快的$.closest
实际上是最慢的
答案 2 :(得分:1)
如果“排除的节点”有一个“id”或某些东西用作选择器,那就是:
var inputs = $('input').not('#excluded *');
或
var inputs = $('input').not('#' + node.id + ' *');
答案 3 :(得分:0)
$('input').not('#someID input').doSOmething()
答案 4 :(得分:0)
var inputs = $('input').not('*', excludedNode);
或
var inputs = $('input').not('*', $(excludedNode));
看起来更好。