【发布时间】:2014-07-14 07:59:00
【问题描述】:
假设我有一个存储在名为 obj 的变量中的 jQuery 对象/集合,它应该包含一个 DOM 元素,其 id 名为 target。
我事先不知道target是否会是obj中的child,即:
obj = $('<div id="parent"><div id="target"></div></div>');
或者如果obj 等于 目标,即:
obj = $('<div id="target"></div>');
或者如果target是obj内的顶级元素,即:
obj = $('<div id="target"/><span id="other"/>');
我需要一种从obj中选择target的方法,但是我事先不知道什么时候用.find,什么时候用使用 .filter.
从 obj 中提取 target 的最快和/或最简洁的方法是什么?
我想出的是:
var $target = obj.find("#target").add(obj.filter("#target"));
更新 我正在向 JSPERF 测试页面添加解决方案,以查看哪个是最好的。 目前我的解决方案仍然是最快的。 这是链接,请运行测试,以便我们获得更多数据:
【问题讨论】:
-
问题:你手里有目标ID,那为什么还要从一个对象中过滤或查找呢?您可以使用 $("#target") 或 document.getElementById("target").(Id 对于页面 ryt 是唯一的) 只是出于好奇而询问。
-
$obj.find('#target').andSelf().filter('#target');? -
@Jashwant 还是比我的方法慢一点。见:jsperf.com/jquery-selecting-objects/12
-
是的,我已经检查过了。因此,评论。它不是那么慢,而且很干净。
标签: jquery performance jquery-selectors cross-browser jquery-traversing