是否有任何优雅的方式[$(div), $(span), $(li)]变成$(div, span, li)?
我需要的是一个jQuery包装的元素集,而不是jQuery元素的数组.我想在尽可能少的代码行中执行此操作,并使用最少的(如果有的话)循环.
编辑: 对于那些对此问题感到困惑的人,此代码将使用console.log从已选择的元素数组中复制并粘贴到firebug中.
Bro*_*ams 48
jQuery的map()功能非常适合重塑数组和/或jQuery集合.
所以,给定一个像这样的数组:
var arrayOfJQ_Objects = [$("div"), $("span"), $("li")];
Run Code Online (Sandbox Code Playgroud)
这一行代码就是您所需要的(在jsFiddle中查看它):
$(arrayOfJQ_Objects).map (function () {return this.toArray(); } );
Run Code Online (Sandbox Code Playgroud)
导致Firebug中的此控制台显示:
jQuery(div, span, li)
Run Code Online (Sandbox Code Playgroud)
另外,参考jQuery的.toArray()功能.
jfr*_*d00 17
如果您真正的意思是如何转换:
[$(a), $(b), $(c)]
Run Code Online (Sandbox Code Playgroud)
进入结果:
$(a, b, c)
Run Code Online (Sandbox Code Playgroud)
然后你可以使用add函数将每个jQuery对象添加到另一个jQuery对象:
var x = $(); // empty jQuery object
$.each([$(a), $(b), $(c)], function(i, o) {x = x.add(o)});
Run Code Online (Sandbox Code Playgroud)
此时,x将包含一个组合的jQuery对象,它是数组中先前的a,b和c jQuery对象的组合.
没有each()循环,我找不到任何办法.该add()函数接受一个DOM元素数组作为参数,但(至少根据文档),而不是jQuery对象的数组.
或者,您可以使用这可能会更高效,因为它最后只生成一个新的jQuery对象:
$([$(".a"), $(".b"), $(".c")].map(function(o) { return o.get() }));
Run Code Online (Sandbox Code Playgroud)
小智 6
比接受的答案更简洁,可以使用$.fn.toArray作为传递给的参数$.fn.map:
var list = [$('<a>'), $('<b>'), $('<i>')];
$(list).map($.fn.toArray);
Run Code Online (Sandbox Code Playgroud)
或许(这真的很差,但在你的代码中只有一个函数调用):
$.fn.map.call(list, $.fn.toArray);
Run Code Online (Sandbox Code Playgroud)
您可以使用该add方法将jQuery对象中的元素复制到另一个对象.这会将数组中每个jQuery对象的所有元素复制source到jQuery对象中items:
// Create an empty jQuery object
var items = $([]);
// Add the elements from each jQuery object to it
$.each(source, function(){ items = items.add(this); });
Run Code Online (Sandbox Code Playgroud)
(在1.3.2版之前,该add方法不支持添加jQuery对象,因此您需要使用它items.add(this.get());.)
| 归档时间: |
|
| 查看次数: |
21133 次 |
| 最近记录: |