将元素添加到JQuery Collection的开始



我想在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] ]);

但是请注意,在这种情况下,如果选择器不匹配

,则将未定义值添加到数组中

最新更新