jQuery添加元素到空选择?

Hca*_*tek 32 collections jquery

为什么这不起作用?

var spans = $();
var elem = document.getElementById('someId');
spans.add(elem);
Run Code Online (Sandbox Code Playgroud)

从空集合开始并向其添加元素的正确方法是什么?我想遍历一组id并在页面上找到元素并将其添加到匹配的集合中.

azi*_*ani 49

引用jQuery网站:

给定一个表示一组DOM元素的.add()jQuery对象,该方法从这些元素的并集和传递给方法的元素构造一个新的jQuery对象.

因此,当你这样做.add()时不会保存添加的元素,你必须显式地将元素分配给新创建的对象,即

var $elements = $('.elements');
$elements = $elements.add($('#anotherelement'));
Run Code Online (Sandbox Code Playgroud)


use*_*716 15

.add()方法返回一个新的jQuery对象,因此您需要覆盖旧的jQuery对象:

spans = spans.add( elem );
Run Code Online (Sandbox Code Playgroud)

...或者因为您正在添加DOM元素,您可以使用修改现有的jQuery对象.push().

spans.push( elem );
Run Code Online (Sandbox Code Playgroud)

编辑:更改.pushStack().push(),虽然我不知道,如果不.push()被官方支持.


您可以使用.pushStack()添加集合.

spans = spans.pushStack( [elem] );
Run Code Online (Sandbox Code Playgroud)

要么

spans = spans.pushStack( document.getElementsByTagName('div') );
Run Code Online (Sandbox Code Playgroud)

  • jQuery 1.6.2代码中的注释表示push()是"仅供内部使用",并且它不在jQuery doc中.使用`.add()`似乎更安全,并将新的jQuery对象分配给变量`span`. (2认同)
  • 我认为其中一个问题是jQuery喜欢将DOM元素保持为独特(没有重复)和(我认为)在DOM顺序中,而`.push()`不会这样做,因为它直接添加了一些内容阵列.jQuery代码经常使用`.push()`后跟一个`.unique()`,它会让事情按照他们喜欢的方式保留. (2认同)

jfr*_*d00 6

我想我得不到你问的问题.如果您有一个元素,并且想要将其添加到集合中,则只需使用该.add()方法,就像您已经显示的那样.令人困惑的是,这会返回一个新的jQuery对象,所以你会这样做:

var spans = $();
var elem = document.getElementById('someId');
spans = spans.add(elem);
Run Code Online (Sandbox Code Playgroud)

当然,这样的事情会更短:

var spans = $();
spans = spans.add('#someId');
Run Code Online (Sandbox Code Playgroud)

当然,您不必从空对象开始.你只需要:

var spans = $('#someId');
Run Code Online (Sandbox Code Playgroud)


mar*_*yzm 5

如果您正在寻找pushadd从 jQuery 对象中选择的项目,您也可以这样做:

var $els = $(),
    $someEls = $(".some-els");

$els.push.apply($els, $someEls);
Run Code Online (Sandbox Code Playgroud)

只是另一种方式来做到这一点。