jQuery的each()
方法是一个通用的迭代函数,可以用来无缝地迭代对象和数组。当需要重新排序DOM元素时,each()
可以配合其他jQuery方法如appendTo()
、insertBefore()
等来实现元素顺序的调整。
// 假设我们有一组需要重新排序的div元素
$('.item').each(function(index) {
// 根据某种逻辑重新排序,这里以倒序为例
var newPosition = $('.item').length - 1 - index;
$(this).insertAfter($('.item').eq(newPosition));
});
<div class="item" data-order="3">Item 3</div>
<div class="item" data-order="1">Item 1</div>
<div class="item" data-order="2">Item 2</div>
// 先获取并按data-order排序
var items = $('.item').get().sort(function(a, b) {
return $(a).data('order') - $(b).data('order');
});
// 清空容器
$('#container').empty();
// 重新添加排序后的元素
$(items).each(function() {
$('#container').append(this);
});
var items = $('.item').get().sort(function(a, b) {
return $(a).text().localeCompare($(b).text());
});
$('#container').empty().append(items);
原因:直接重新创建DOM元素会丢失之前绑定的事件 解决:使用事件委托或在重新排序后重新绑定事件
// 使用事件委托
$('#container').on('click', '.item', function() {
// 事件处理
});
// 这样即使重新排序,事件仍然有效
原因:频繁操作DOM导致重绘和回流 解决:使用文档片段(document fragment)批量操作
var fragment = document.createDocumentFragment();
$(items).each(function() {
fragment.appendChild(this);
});
$('#container').empty().append(fragment);
解决:使用更灵活的排序函数
var items = $('.item').get().sort(function(a, b) {
// 复杂排序逻辑
var aValue = $(a).data('someAttribute');
var bValue = $(b).data('someAttribute');
if (aValue === bValue) {
return $(a).data('secondaryAttribute') - $(b).data('secondaryAttribute');
}
return aValue - bValue;
});
没有搜到相关的沙龙