Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从缓存选择器遍历DOM是否比查找ID';DOM中的d元素?_Jquery_Optimization_Dom Traversal - Fatal编程技术网

Jquery 从缓存选择器遍历DOM是否比查找ID';DOM中的d元素?

Jquery 从缓存选择器遍历DOM是否比查找ID';DOM中的d元素?,jquery,optimization,dom-traversal,Jquery,Optimization,Dom Traversal,关于通过类、id或其他选择器查找元素是否更快,有很多问题。我对此不感兴趣。我想知道你是否有: var link = $(this); //let's say you're in a click handler 通过这样做查找容器是否更快 var container = link.closest('.container'); //assume container is .container 或 我问这个问题不仅仅是为了上面的特定场景(好吧,好吧,是的,也是为了这个场景),而是为了缓存遍历而不是

关于通过类、id或其他选择器查找元素是否更快,有很多问题。我对此不感兴趣。我想知道你是否有:

var link = $(this); //let's say you're in a click handler
通过这样做查找容器是否更快

var container = link.closest('.container'); //assume container is .container

我问这个问题不仅仅是为了上面的特定场景(好吧,好吧,是的,也是为了这个场景),而是为了缓存遍历而不是创建一个新的具有ID的jQuery对象。我注意到在我的很多代码中,我倾向于使用前一种方法(因为它可以使自己更具动态性),但我总是好奇,用后一种方法是否更快


谢谢

我认为,不管是否使用缓存选择器,使用id选择器会更快。ID选择器基本上是直接字典查找,而不是缓存/最近的组合,就像字典查找,然后是树遍历

使用本机documentGetElementById函数可以完成最快的查找

var container = $(document.getElementById('MyContainer'));

我怀疑后者更快,但你测试过吗?构建一个测试工具是非常容易的…我不确定这些信息是否过时,是否在jQuery的最新迭代中得到了更正,但我非常确定
.closest()
相对来说比其他替代方法要慢。我实际上创建了一个jsperf:看起来ID肯定是最快的,接下来是按类查找。看起来遍历树通常比较慢,这让我想知道使用缓存对象然后从中进行遍历有多好……在遍历时,我通常使用缓存对象来查找子元素的集合。i、 e.
$cachedObject.find('.untoggled children').toggle().toggleClass('untoggled-children-toggled children')
但是,当要查找具有id的单个元素时,我将始终使用
$(document.getElementById('myid'))
var container = $(document.getElementById('MyContainer'));