jQuery:如何加入所选元素集?

时间:2014-01-31 18:00:30

标签: javascript jquery

我一定错过了一些东西,因为我环顾四周,我找不到简单的答案。

我有许多jQuery对象,我正在以编程方式构建:

var jq1 = $('#stuff');
var jq2 = $('p.error');
var jq3 = $('<span>Hey!</span>');
/* and so on */

问题:如何创建一个jQuery对象,它是所有这些对象的串联?

我知道我可以使用.add()方法添加单个jQuery选择,因此我可以在循环中逐个添加所有这些元素,每次迭代创建一个新对象。 jQuery是否有办法在不创建大量新对象的情况下加入所有这些?


更新:我试图保持它的通用性,但为了给它一些更多的上下文,我真正想要的是生成未知数量的元素,如第三行。生成的元素将是未知类型。我会在DOM中注入它们,其中我也一无所知,然后我仍然需要一个包含这些元素的jQuery对象来稍后操作它们。

5 个答案:

答案 0 :(得分:1)

要从DOM中选择内容,请使用:

$('#stuff, p.error') // notice separated with comma to act as an 'and'

其余使用.add()。不要担心“创造大量物品”它们只是指向对方,它并没有真正伤害任何东西。

请记住,如果您愿意,可以使用一堆.add内联:

$('#stuff').add('p.error').add('<span>Hey!</span>').add('<p>hello world</p>'); // and so on

答案 1 :(得分:0)

您可以轻松组合选择器var jq1 = $('#stuff, p.error');,但第三个是生成新的DOM元素。我不建议将它组合起来,因为它在DOM中尚不存在,你可能会有代码假定它都在DOM中。

答案 2 :(得分:0)

您可以将所有选择器组合成一个选择器字符串,该字符串是所有元素的并集,或者您可以将jQuery对象与.add()或两者的某种组合组合。

var jqAll = $('#stuff, p.error').add('<span>Hey!</span>');

如果使用.add(),你必须记住它返回一个新的jQuery对象(它不只是向现有的jQuery对象添加内容)。


如果你正在生成一堆DOM对象并且想要它们都在一个jQuery对象中,那么你可以创建一个DOM对象数组并将它们一次性添加到一个jQuery对象中。你可以通过几种方式做到这一点。如果已有一个名为domObjects的数组中的domObject数组。然后,您可以直接对数组进行操作,将它们全部放入一个jQuery对象中,如下所示:

var jqAll = $(domObjects);

或者,如果要将它们全部添加到现有的jQuery对象中:

var jqAll = $('#stuff, p.error').add(domObjects);

答案 3 :(得分:0)

您可以使用数组构建jQuery对象:

var jq1 = $('#stuff');
var jq2 = $('p.error');
var jq3 = $('<span>Hey!</span>');

var $all = $([jq1[0], jq2[0], jq3[0]]);

或者,如果你有很多元素,并且你不想搞乱所有的数组索引:

var $all = $([jq1, jq2, jq3].map(function(elt){return elt[0];}));

答案 4 :(得分:0)

如果您的对象中有未知数量的结果,并且您希望在没有手动循环的情况下将它们转换为单个html字符串,那么这很快就会变脏。

如果他们都是兄弟姐妹并且您不介意更新可见的DOM:

var html = $jQuery(massiveSet).wrapAll('<div>').parent().html();

如果你不想像他们已经显示的那样更改DOM中的元素,或者他们不是兄弟姐妹,你可能想先克隆:

var html = $jQuery(massiveSet).clone().wrapAll('<div>').parent().html();

然后你可以把它放回到你喜欢的地方:

$('body').append(html);