Jquery - .children()。children()vs .find()

时间:2014-01-27 20:02:11

标签: javascript jquery dom

我有一个场景,我知道我正在寻找的div正好是两个级别。

使用效率更高:

$('#mydiv').find('.myselector')

$('#mydiv').children().children('.myselector')

2 个答案:

答案 0 :(得分:7)

使用您的控制台进行检查。首先检查你的第一个建议:

console.time('benchmark');
for (var i=0; i<1000; i++) {
  var $elem = $('#mydiv').find('.myselector');
}
console.timeEnd('benchmark');

现在为你的第二个建议做同样的事情:

console.time('benchmark');
for (var i=0; i<1000; i++) {
  var $elem = $('#mydiv').children().children('.myselector');
}
console.timeEnd('benchmark');

运行两个版本以真正检查是否存在显着差异。使用这种测试方式来优化您的选择器。

答案 1 :(得分:1)

请改为尝试:

var elems = document.getElementById('mydiv').querySelectorAll(".myselector");

A comparison jQuery与我的一些Vanilla JS想法相比。


编辑:对于IE7支持:

var container = document.getElementById('mydiv'), elems = [],
    firstlevel = container.children, l = firstlevel.length,
    secondlevel, m, i, j;
for( i=0; i<l; i++) {
    secondlevel = firstlevel[i].children;
    m = secondlevel.length;
    for( j=0; j<m; j++) {
        if( secondlevel[j].className.match(/\bmyselector\b/)) {
            elems.push(secondlevel[j]);
        }
    }
}

...是的,不漂亮!但仍然比jQuery快!