很不幸,我需要迭代一个页面上的所有DOM元素,想知道最有效的技术是什么。我可能可以自己进行基准测试,如果有时间可能会这样做,但我希望有人已经经历过这个或者有一些我没有考虑过的选项。
目前我正在使用jQuery并执行以下操作:
$('body *').each(function(){
var $this = $(this);
// do stuff
});
虽然它能够工作,但似乎会导致客户端出现一些滞后。它也可以通过更具体的jQuery上下文进行调整,例如$('body', '*')
。我想到原生JavaScript通常比jQuery更快,我找到了这个:
var items = document.getElementsByTagName("*");
for (var i = 0; i < items.length; i++) {
// do stuff
}
我假设使用本地选项更快。想知道是否有其他选项我没考虑到的。也许有一个递归选项,可以并行迭代子节点。
document.querySelectorAll('body *')
,但它必须先运行大约 200 行的 Javascript 代码,包括一个正则表达式测试和其他内容,然后才决定这样做。 这可能看起来不像什么,但与document.body.getElementsByTagName('*')
相比,它确实是很多的。 - Pauldocument.querySelectorAll('*')
而不是document.querySelectorAll('body *')
或者document.body.querySelectorAll('*')
。我已经更新了你的测试:http://jsperf.com/js-vs-jquery-select-all/2。 - Paul