Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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
Javascript 如何使用jQuery获取DOM live集合?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 如何使用jQuery获取DOM live集合?

Javascript 如何使用jQuery获取DOM live集合?,javascript,jquery,dom,Javascript,Jquery,Dom,如何从jQuery访问实时DOM集合 以这个HTML和这个JavaScript代码为例: var a = $('#a'); var divs = a[0].getElementsByTagName('DIV'); for(var i=0; divs.length < 20; ) { a.append($('<div>'+(i++)+'</div>')); } var a=$('a'); var divs=a[0]。getElementsByTagName(

如何从jQuery访问实时DOM集合

以这个HTML
和这个JavaScript代码为例:

var a = $('#a');
var divs = a[0].getElementsByTagName('DIV');
for(var i=0; divs.length < 20; ) {
    a.append($('<div>'+(i++)+'</div>'));
}
var a=$('a');
var divs=a[0]。getElementsByTagName('DIV');
对于(变量i=0;divs.length<20;){
a、 追加($(''+(i++)+''));
}
它将向
添加20个div子项,因为
divs
是一个实时集合

jQuery中是否有任何东西可以替换第二行以获得相同的结果

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


JSFIDLE是。

每次选择元素,这将创建一个新的jQuery对象。我认为这是元素变化的唯一方式

var a = $('#a');

for(var i=0; $('#a div').length < 20; ) {
    a.append($('<div>'+(i++)+'</div>'));
    if(i==50) break;
}
var a=$('a');
对于(变量i=0;$('a div')。长度<20;){
a、 追加($(''+(i++)+''));
如果(i==50)中断;
}
编辑: 或者这个:

for(var i=0,a=$('a');a.children('div')。长度<20;){
a、 追加($(''+(i++)+''));
如果(i==50)中断;
}
或者,只有一个选择器:

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

while(length < 20) {
        a.append($('<div>'+(length++)+'</div>'));
}
var a=$('a');
变量长度=a.children('div')。长度;
而(长度<20){
a、 追加($(''+(长度++)+''));
}
如何使用jQuery获取DOM live集合

那是不可能的

这与示例代码的效果相同,不过:

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

for (var i = 0; i < 20; i++) {
    $a.append('<div>' + i + '</div>');
}
var$a=$('#a');
对于(变量i=0;i<20;i++){
$a.append(“”+i+“”);
}

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

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

for (i = 0; i < toAdd; i++) {
    $a.append('<div>' + i + '</div>');
}
var$a=$('#a'),
toAdd=数学最大值(20-$('div',$a).length,0),
我
对于(i=0;i

总是20个div儿童吗

使用以下命令不是更好吗

var a = $('#a div');
for(var i=0; i < 20; i++) {
    a.append($('<div>'+(i)+'</div>'));
}
var a=$('a div');
对于(变量i=0;i<20;i++){
a、 追加($(''+(i)+'');
}
如果
#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>');
}
var$a=$('#a'),
toAdd=数学最大值(20-$a.find('div')。长度,0);
对于(变量i=0;i

这相当于上面的代码。

您要查找的语法是:

var divs = $('div#a');
由于ID应该是唯一的,因此您可以执行以下操作:

var divs = $('#a');

实时集合——真正的集合,不是现代jquery可以返回的。 此外,打算在最近的将来替换getElementsByTagName的现代方法getQuerySelector也会返回一个静态集合

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

但这将执行20次“#a div”选择器循环多少次?这是否会影响性能是值得怀疑的。请更改为一段时间并在循环之前计数?更新后的answer.20只是一个例子,编码时不知道实际的数字-它将取决于运行时已经存在的div子级的数量。该循环需要定期执行,以确保最多有20个div子级,所以20不能算作需要的循环数。那么你是说使用live Collection是一种糟糕的风格吗?好吧,bad这个词太强了。我更愿意说,在依赖集合的活性属性时应该非常小心,因为它不仅不太明显,而且对技术也不太了解。嗯,经过思考,可能是“坏的”是非常合适的)是的,这是最接近我需要的,如果在循环@ʘleg时其他东西没有添加另一个div:因为JavaScript是单线程的,这应该不是问题。
var divs = $('#a');