Collections jQuery是否向空选择添加元素?
为什么这样不行Collections jQuery是否向空选择添加元素?,collections,jquery,Collections,Jquery,为什么这样不行 var spans = $(); var elem = document.getElementById('someId'); spans.add(elem); 从空集合开始并向其中添加元素的正确方法是什么? 我想在ID集合中循环,找到页面上的元素,并将其添加到匹配的集合中。您真正想做的是使用jQuery充分发挥其潜力。您可以使用选择器立即抓取并创建集合。上面的三行变成一行: var spans = $('#someId'); 要向集合中添加更多ID,可以使用逗号分隔: var
var spans = $();
var elem = document.getElementById('someId');
spans.add(elem);
从空集合开始并向其中添加元素的正确方法是什么?
我想在ID集合中循环,找到页面上的元素,并将其添加到匹配的集合中。您真正想做的是使用jQuery充分发挥其潜力。您可以使用选择器立即抓取并创建集合。上面的三行变成一行:
var spans = $('#someId');
要向集合中添加更多ID,可以使用逗号分隔:
var spans = $('#someId1, #someid2, #someid3');
试一试
var span=$(“”);
var elem=$(“#someId”).html();
span.append(elem).appendTo(“#someAnotherId”);
相反可能有更好的方法来执行您正在尝试的操作,但是如果您只想创建一个空的jQuery对象,请使用以下方法:
var $foo = $([]);
编辑:我应该澄清一下-您的代码实际上应该可以工作,除非您使用的是较旧版本的jQuery,在这种情况下,
$()
将创建一个包含文档
对象的集合。然而,在新版本中,这并没有什么问题。我上面粘贴的代码片段应该可以在jQuery的旧版本和新版本中使用。
编辑2:为了回答问题的这一部分:“我想在ID集合中循环,并在页面上找到元素并将其添加到匹配集”,以下代码可能很有用:
var ids = ['foo', 'bar', 'baz'],
selector = $.map(ids, function(i, id) {
return '#' + id;
}).join(','),
$collection = $(selector);
.add()
方法返回一个新的jQuery对象,因此需要覆盖旧的对象:
spans = spans.add( elem );
…或者,由于要添加DOM元素,因此可以使用.push()
修改现有的jQuery对象
编辑:将
.pushStack()
更改为.push()
,但我不知道是否正式支持.push()
您可以使用
.pushStack()
添加一个集合
spans = spans.pushStack( [elem] );
或
代码不起作用的原因是
add
不会更改集合,而是返回一个包含新元素的新jQuery对象。如果你愿意,你可以说span=span.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
引述:
给定一个表示一组DOM元素的jQuery对象,.add()
方法通过这些元素和传递给该方法的元素的并集构造一个新的jQuery对象
因此,当您这样做时,它不会保存添加的元素,您必须显式地将元素分配给新创建的对象,即
var $elements = $('.elements');
$elements = $elements.add($('#anotherelement'));
我想我不明白你的要求。如果您有一个元素,并且希望将其添加到集合中,只需使用.add()
方法,就像前面所示。让一些人困惑的是,这会返回一个新的jQuery对象,因此您可以这样做:
var spans = $();
var elem = document.getElementById('someId');
spans = spans.add(elem);
当然,像这样的东西会更短:
var spans = $();
spans = spans.add('#someId');
当然,您不必从空对象开始。您可以从以下内容开始:
var spans = $('#someId');
如果要查看从jQuery对象中选择的推送
或添加
项,也可以执行以下操作:
var $els = $(),
$someEls = $(".some-els");
$els.push.apply($els, $someEls);
这只是另一种方法。虽然这并不能直接回答“如何附加到现有jQuery选择”的问题,但我有一个解决这个特定用例的方法
您可以将一个DOM元素数组传递给jQuery,它将从中创建一个jQuery选择
var spansArray = [];
var elem = document.getElementById('someId');
spansArray.push(elem);
var spans = $(spansArray);
我想不出为什么您需要一次一个地将每个元素添加到jQuery选择中,而不是一次将所有元素都添加到jQuery选择中,因此这应该是您用例的“替代品”。从理论上讲,这也必须证明更有效,因为jQuery的.add()
最终只是在幕后的某个数组上调用.push()
。公平地说,jQuery的“预期用途”可能比您认为的要广一些……jQuery 1.6.2代码中的注释说push()是“仅供内部使用”而且它不在jQuery文档中。使用.add()
并将新的jQuery对象分配给变量span
@jfriend00似乎更安全:是的,有一些类似的。如果支持它们就好了。我认为其中一个问题是jQuery喜欢保持DOM元素的唯一性(没有DUP)和(我认为)DOM顺序,而。push()
不这样做,因为它只是直接向数组中添加了一些内容。jQuery代码经常执行一个.push()
,然后执行一个.unique()。我只需要重新分配原始变量。这是解决这一问题的关键。谢谢大家。只是想知道ppl什么时候开始在javascript中使用$?PHP中最烦人的部分是,为什么要在其他语言中使用它?@Srneczek他们在它前面加了一个“sigil”,以表明它是一个“jQuery selection”对象,而不是一个常规的js数组/对象。这里有一个可以解释更多的问题:@Eric oh我明白了,这确实是最好的做法,但变量前的任何符号对类型来说都是纯粹的邪恶取决于jQuery版本,要创建一个空的jQuery对象,您可能需要执行$([])
而不是$()
。实际上,这似乎是唯一一个解决问题的方法:不仅要将选定的元素添加到空的、分离的集合中,还要将新创建的元素添加到该集合中。我喜欢在创建长列表,然后将结果分离的集合附加到最终的dom元素时使用这种方法。我想知道为什么$els.push($Somels)失败了。谢谢-这是因为您正在将一个数组推到一个数组上。Apply拆分扩展的jQuery数组,并将每个单独的元素推送到该数组上。与var arr-[]相同;arr.push.apply([1,2,3])
,真的。add
还可以对底层数组重新排序,
var spans = $('#someId');
var $els = $(),
$someEls = $(".some-els");
$els.push.apply($els, $someEls);
var spansArray = [];
var elem = document.getElementById('someId');
spansArray.push(elem);
var spans = $(spansArray);