为什么这个不起作用?
var spans = $();
var elem = document.getElementById('someId');
spans.add(elem);
如何以空集合开始并向其中添加元素? 我希望遍历id的集合,查找页面上的元素,并将其添加到匹配集中。
为什么这个不起作用?
var spans = $();
var elem = document.getElementById('someId');
spans.add(elem);
如何以空集合开始并向其中添加元素? 我希望遍历id的集合,查找页面上的元素,并将其添加到匹配集中。
.add()
方法返回一个新的 jQuery 对象,因此您需要覆盖旧对象:spans = spans.add( elem );
...或者,由于您正在添加DOM元素,您可以使用.push()
修改现有的jQuery对象。
spans.push( elem );
编辑:将.pushStack()
更改为.push()
,尽管我不知道.push()
是否得到了官方支持。
你可以使用.pushStack()
来添加一个集合。
spans = spans.pushStack( [elem] );
或者spans = spans.pushStack( document.getElementsByTagName('div') );
.add()
并将新的jQuery对象分配给变量span
似乎更安全。 - jfriend00.push()
不会这样做,因为它直接将某些内容添加到数组中。jQuery代码经常执行.push()
,然后跟着一个.unique()
,以便将事物放回它们想要保持的方式。 - jfriend00我猜我不明白你的问题。如果你有一个元素,并且想将它添加到集合中,那么你只需要使用.add()
方法,就像你已经展示的那样。有些人会感到困惑的是这会返回一个新的jQuery对象,所以你需要这样做:
var spans = $();
var elem = document.getElementById('someId');
spans = spans.add(elem);
当然,这样的东西会更短:
var spans = $();
spans = spans.add('#someId');
当然,您不必从空对象开始。您只需从以下内容开始:
var spans = $('#someId');
推送(push)
或添加(add)
的项目,也可以这样做:var $els = $(),
$someEls = $(".some-els");
$els.push.apply($els, $someEls);
另一种实现方式。
var arr = []; arr.push.apply([1,2,3]);
一样。 - marksyzmvar spans = $('#someId');
要将更多的id添加到集合中,您可以用逗号分隔它们:
var spans = $('#someId1, #someid2, #someid3');
var spansArray = [];
var elem = document.getElementById('someId');
spansArray.push(elem);
var spans = $(spansArray);
.add()
最终只是在幕后调用一些数组上的.push()
。可能有更好的方法来完成你尝试做的事情,但如果你只想创建一个空的jQuery对象,请使用这个:
var $foo = $([]);
$()
会创建一个包含document
对象的集合。然而,在较新的版本中,这没有任何问题。我上面粘贴的代码片段只是在旧版本和新版本的jQuery中都能正常工作的东西。
var ids = ['foo', 'bar', 'baz'],
selector = $.map(ids, function(i, id) {
return '#' + id;
}).join(','),
$collection = $(selector);
尝试
var spans = $("<span />");
var elem = $("#someId").html();
spans.append(elem).appendTo('#someAnotherId');
替代
add
不会改变集合,它返回一个包含新元素的新jQuery对象。如果你想的话,你可以使用spans = spans.add(elem);
,但这样做是不必要的:jQuery的美妙之处在于它使得这种命令式编程变得不必要。看看helloandre的答案,实现你的目标会更容易。var x = [1, 2, 3];
x.concat(4);
console.log(x); // [1, 2, 3] -- concat does not mutate the original array
$([])
而不是$()
。请参见https://dev59.com/kHI-5IYBdhLWcg3wI0p9。 - allicarn