我想在jQuery集合的开头添加一些新元素。
add
方法不会按照我想要的顺序添加元素。http://jsfiddle.net/f8z7v/1/
html
<p>p</p>
<i>i</i>
<b>b</b>
JavaScript
// will be ordered according to the order they appear on the document
$('i').add('p').add('b');
// new elements will always appear at the end
$('i').add('<u id="u"></u>');
$('<u id="u"></u>').add('i');
// taking control of the ordering using raw arrays
var u = $('<u id="u"></u>').toArray();
u.push($('i')[0])
$(u);
最后一个选项有效,但有点丑陋。有什么干净的方法吗?
- 编辑 -
根据评论的解决方案:
// Create the collection you want at the beginning
var newElems = $('<div></div>');
// Push new collection to it
newElems.push.apply(newElems, $('i, b, p'));
jQuery .add()
不添加该顺序的元素。它在文档中提到。
不假定此方法将元素附加到现有 按顺序收集它们将传递给.add()方法。全部 元素是同一文档的成员 从.add()将按文档顺序排序;也就是说,按顺序 每个元素在文档中的外观。如果收藏的组成 来自不同文档的元素或任何文档中的元素, 排序顺序不确定。创建一个带有元素的jQuery对象 定义明确的订单,使用$(array_of_dom_lements)签名。
参考:http://api.jquery.com/add/
如果要在集合的最后一个。
.push
。我很久以前就遇到了类似的问题,并这样解决了:
$.fn.addTo = function(array) {
var newArray = $(this).toArray();
array.each(function(){
newArray.push(this);
});
return $(newArray);
}
var items = $("i").add("b").add("p");
items = $("<ul></ul>").addTo(items);
另外,由于我返回jQuery对象,此addTo()
方法可以是方法链的一部分。
您是否尝试过.prepend()
?
插入由参数指定的内容,到每个开始的开始 匹配元素集中的元素。
您还可以使用.get()方法检索DOM节点并将其传递到$()
,例如:
$( $('#a').get().concat($('.b').get()).concat($('c').get()) );
,或者如果足以获得第一个元素,则这是一个简化的版本
$([ $('#a')[0], $('.b')[0], $('c')[0] ]);
但是请注意,在这种情况下,如果选择器不匹配