Javascript 使用相邻元素在DOM中排序
我有下面的DOM结构,我想根据创建的Javascript 使用相邻元素在DOM中排序,javascript,jquery,dom,sorting,plugins,Javascript,Jquery,Dom,Sorting,Plugins,我有下面的DOM结构,我想根据创建的数据属性对其进行排序 <a id="comment-34" href="#"/> <li data-created="12342342" /> <a id="comment-35" href="#"/> <li data-created="89342342" /> <a id="comment-36" href="#"/> <li data-created="45363342" />
数据
属性对其进行排序
<a id="comment-34" href="#"/>
<li data-created="12342342" />
<a id="comment-35" href="#"/>
<li data-created="89342342" />
<a id="comment-36" href="#"/>
<li data-created="45363342" />
然而,排序之后发生的是,但它可能会遇到相同的问题
有办法吗?同样,我不能将
和
包装在外部
中。我也不想动态包装
,以便使用tsort
任何干净的溶液:-)?你不可能真正拥有
和
编辑:更简单的版本:)
像这样的东西应该适合你:
var elms = [];
$('a').each(function() { //create the array of a and li
var pair = {
aTag: $(this),
liTag: $(this).next("li")
};
elms.push(pair);
});
$("a, li").detach(); //detach them from the dom
elms.sort(function(a, b) {
return a.liTag.data("created") < b.liTag.data("created"); //sort based upon the created data
});
$.each(elms , function(){
$("ul").append(this.aTag).append(this.liTag); //push them back to the dom.
});
var-elms=[];
$('a')。each(function(){//创建a和li的数组
变量对={
aTag:$(本次),
利塔格:$(本).next(“李”)
};
榆树推(对);
});
$(“a,li”).detach()//将它们从dom中分离
elms.sort(函数(a,b){
返回a.liTag.data(“已创建”)
继续编码示例。将a
元素移动到其各自的列表项中。那么你应该能够使用你提到的那种
即使将元素作为兄弟元素是有效的,我仍然觉得它的形式很糟糕。FYI,这不是有效的HTML。不可能将li
和a
元素作为兄弟元素。据我所知,这是有效的HTML。例如,在
之前的可以用作锚。唯一可以包含li元素的元素是OL和UL,两者都不能包含A元素。@ikegami在调查中我发现你是正确的。HTML验证程序也会抱怨。我喜欢这个解决方案。它很干净。同时使用detach()和remove()值得称赞。谢谢。我们在同一分钟有完全相同的想法吗?关于分离()的想法很好。
var items = [];
$('#sortme a').each(function(){
// grab the element and its next sibling
var self = $(this)
, next = self.next('div');
items.push([
self.remove().get(0),
next.remove().get(0)
]);
});
items.sort(function(a,b){
return a[1].getAttribute('data-created') > b[1].getAttribute('data-created');
});
$.each(items, function(){
$('#sortme').append(this[0], this[1]);
});
var sorted = $('#sortme');
sorted.find('div')
.sort(function(a,b){
return $(a).data('created') > $(b).data('created');
})
.each(function(){
$(this).prev('a').andSelf().appendTo(sorted);
});
var elms = [];
$('a').each(function() { //create the array of a and li
var pair = {
aTag: $(this),
liTag: $(this).next("li")
};
elms.push(pair);
});
$("a, li").detach(); //detach them from the dom
elms.sort(function(a, b) {
return a.liTag.data("created") < b.liTag.data("created"); //sort based upon the created data
});
$.each(elms , function(){
$("ul").append(this.aTag).append(this.liTag); //push them back to the dom.
});