use*_*809 38 html javascript sorting jquery
(对不起,如果问题已经存在)
我是jQuery开发的新手.
我的HTML结构如下:
<div class="clist">
<div data-sid=1></div>
<div data-sid=2></div>
<div data-sid=2></div>
<div data-sid=1></div>
<div data-sid=2></div>
<div data-sid=2></div>
<div data-sid=1></div>
</div>
Run Code Online (Sandbox Code Playgroud)
我想把它们分类为:
<div class="clist">
<div data-sid=1></div>
<div data-sid=1></div>
<div data-sid=1></div>
<div data-sid=2></div>
<div data-sid=2></div>
<div data-sid=2></div>
<div data-sid=2></div>
</div>
Run Code Online (Sandbox Code Playgroud)
我正在使用该功能
function sortContacts() {
var contacts = $('div.clist'), cont = contacts.children('div');
cont.detach().sort(function(a, b) {
var astts = $(a).data('sid');
var bstts = $(b).data('sid')
return (astts > bstts) ? (astts > bstts) ? 1 : 0 : -1;
});
contacts.append(cont);
}
Run Code Online (Sandbox Code Playgroud)
但它没有按预期工作..
它第一次运行良好,但是当添加新元素或更改数据时,它无法正常工作.
编辑:
演示
不工作?
und*_*ned 74
您可以使用dataset
存储data-*
元素的所有自定义属性的属性,它返回一个字符串,以防您想要将字符串转换为您可以使用的数字parseInt
或+
运算符.
$('.clist div').sort(function(a,b) {
return a.dataset.sid > b.dataset.sid;
}).appendTo('.clist');
Run Code Online (Sandbox Code Playgroud)
是的,你的代码在这里工作,http://jsfiddle.net/f5mC9/
编辑:请注意IE10!以下不支持该.dataset
属性,如果你想支持所有浏览器,你可以使用jQuery的.data()
方法:
$('.clist div').sort(function(a,b) {
return $(a).data('sid') > $(b).data('sid');
}).appendTo('.clist');
Run Code Online (Sandbox Code Playgroud)
dev*_*ide 10
$('.clist div').sort(function(a,b) {
return a.dataset.sid > b.dataset.sid ? 1 : -1; //be carefull, string comparaison
}).appendTo('.clist');
Run Code Online (Sandbox Code Playgroud)
或者可能
$('.clist div').sort(function(a,b) {
return parseInt(a.dataset.sid) - parseInt(b.dataset.sid);
}).appendTo('.clist');
Run Code Online (Sandbox Code Playgroud)
sort()处理负/正回报;
使用jQuery对元素进行排序的更通用的函数:
$.fn.sortChildren = function (sortingFunction: any) {
return this.each(function () {
const children = $(this).children().get();
children.sort(sortingFunction);
$(this).append(children);
});
};
Run Code Online (Sandbox Code Playgroud)
用法:
$(".clist").sortChildren((a, b) => a.dataset.sid > b.dataset.sid ? 1 : -1);
Run Code Online (Sandbox Code Playgroud)