jquery缓存选择器的最佳实践

时间:2015-11-20 21:08:21

标签: javascript jquery performance caching

为以下示例缓存jquery对象的最佳做法是什么。有没有更好的方法呢?

1)

var content='<div id="content">'+
            '<div id="div1"></div>'+
            '<div id="div2"></div>'+
            '<div id="div3"></div>'+
            '</div>';
$('body').append(content);
var $div1=$('#div1'),
    $div2=$('#div2'),
    $div3=$('#div3');

2)

var div1='<div id="div1"></div>',
    div2='<div id="div2"></div>',
    div3='<div id="div3"></div>',
    content='<div id="content">'+div1+div2+div3+'div>';  
$('body').append(content);
var $div1=$(div1),
    $div2=$(div2),
    $div3=$(div3);

3 个答案:

答案 0 :(得分:1)

3)第三个选择:

var $div1 = $('<div id="div1"></div>'),
    $div2 = $('<div id="div2"></div>'),
    $div3 = $('<div id="div3"></div>'),
    $content = $('<div id="content">').append(div1, div2, div3).appendTo("body");

作为奖励提示:如果您正在做一些可能是专用功能的事情,您可能不必缓存div并可以避免更多内存。例如:

$content.on('click', 'div', function(){
    // you clicked on some div even if the listener is on the $content
    // 
})

答案 1 :(得分:1)

在这种情况下,您不会注意到缓存选择器或元素集合会带来任何性能优势,因为通过id选择元素已经非常快了。

第二种情况当然不是缓存,所以它甚至不能与第一种情况相媲美。

答案 2 :(得分:0)

首先是正确的方法。

第二种方法无论如何都行不通,即使它确实只允许你缓存最初在JS中创建的元素,而不是最初在DOM中的任何东西