如何使用jQuery获取DOM实时集合?

时间:2012-02-09 12:14:20

标签: javascript jquery dom

如何从jQuery访问实时DOM集合?

以此HTML <div id='a'></div>和此JavaScript代码为例:

var a = $('#a');
var divs = a[0].getElementsByTagName('DIV');
for(var i=0; divs.length < 20; ) {
    a.append($('<div>'+(i++)+'</div>'));
}

它会将20个div子项追加到<div id='a'>,因为divs是一个直播集合。

jQuery中有什么东西可以替换第二行来获得相同的结果吗?

var divs = $('#a div');导致无限循环。

JSFiddle是here

6 个答案:

答案 0 :(得分:2)

如果#a已包含div:

var $a = $('#a'),
    toAdd = Math.max(20 - $a.find('div').length, 0);

for (var i = 0; i < toAdd; i++) {
    $a.append('<div>' + i + '</div>');
}

这相当于上面的代码。

答案 1 :(得分:2)

Live Collections - 真正的集合,不是现代jquery可以返回的东西。 此外,现代方法旨在取代最近的getElementsByTagName,getQuerySelectorAll也返回一个静态集合。

这是你说过的问题的答案。 至于你真正想问的问题,其他用户已经试图为你提供一些帮助。

答案 2 :(得分:1)

每次选择元素,这将创建一个新的jQuery对象。我觉得这是元素发生变化的唯一方法。

var a = $('#a');

for(var i=0; $('#a div').length < 20; ) {
    a.append($('<div>'+(i++)+'</div>'));
    if(i==50) break;
}

编辑: 或者这个:

for(var i=0, a=$('#a'); a.children('div').length < 20; ) {
    a.append($('<div>'+(i++)+'</div>'));
    if(i==50) break;
}

或者这只是一个选择器:

var a = $('#a');
var length = a.children('div').length;

while(length < 20) {
        a.append($('<div>'+(length++)+'</div>'));
}

答案 3 :(得分:1)

  

如何使用jQuery获取DOM实时馆藏?

那是不可能的。

这与示例代码具有相同的效果:

var $a = $('#a');

for (var i = 0; i < 20; i++) {
    $a.append('<div>' + i + '</div>');
}

http://jsfiddle.net/mathias/Af538/

更新:如果代码需要定期重复,您可以使用以下内容:

var $a = $('#a'),
    toAdd = Math.max(20 - $('div', $a).length, 0),
    i;

for (i = 0; i < toAdd; i++) {
    $a.append('<div>' + i + '</div>');
}

http://jsfiddle.net/mathias/S5C6n/

答案 4 :(得分:0)

总是20个孩子吗?

使用以下

是不是更好
var a = $('#a div');
for(var i=0; i < 20; i++) {
    a.append($('<div>'+(i)+'</div>'));
}

答案 5 :(得分:0)

您正在寻找的语法是:

var divs = $('div#a');

由于ID应该是唯一的,您可以这样做:

var divs = $('#a');