使用jQuery更改列表元素索引
Change list elements index with jQuery
我有一个列表:
<ul>
<li class="item_1">element</li>
<li class="item_2">element</li>
<li class="item_3">element</li>
</ul>
在一些拖放操作之后,我正在切换元素的位置,所以在这之后,我的列表看起来像这样:
<ul>
<li class="item_2">element</li>
<li class="item_3">element</li>
<li class="item_1">element</li>
</ul>
我需要在这个拖动动作之后替换这个元素的类来再次获得排序列表-在拖动之前的状态。
所以,我这样做:
var setItemNumber = function(item) {
item.each(function(i) {
$(this).removeAttr('class').attr('class', 'item_' + (i + 1));
});
}
发生的事情是元素改变了类,但它们在相同的位置,看起来它们没有改变索引,这个迭代作用于以前的DOM列表状态。
我怎么能改变这一点,或者其他东西?有人能帮忙吗?
我猜你要找的是这个:
reindexItems = function() {
var items = $('ul li');
var i = 1;
items.each(function() {
$(this).removeAttr('class').attr('class', 'item_' + i++);
});
}
如果你只是想重命名类那么你可以这样做
var elements = $("li");
for(var i=0; i<elements.length; i++){
$(elements[i]).attr("class", "item_" + i);
}
如果你打算在DOM中重新排序元素,改变类名是行不通的。你需要对它们进行排序因为你使用的是Jquery
var setItemNumber = function(item) {
$(item).sort(function(a,b){
var an = a.attr('class').replace("item_","")
bn = b.attr('class').replace("item_","");
if(an > bn) {
return 1;
}
if(an < bn) {
return -1;
}
return 0;
});
}
我也写了一些解决方案:
var setItemIndex = function(item) {
// iterate each marked item
item.each(function() {
// get index of item
var i = $(this).index();
// set new index based on item class
$(this)
.removeAttr('class')
.attr('class', 'item_' + (i));
});
};
相关文章:
- 将列表元素动画制作到顶部
- 使用Razor和javascript来获得下拉列表元素
- 根据列表元素的值使用JQuery获取列表元素
- 将列表元素动态添加到ul元素中
- 使用 jquery 库获取锚点列表元素内的文本
- 在没有大量回调函数的情况下在列表元素上循环播放同一动画
- 使用JSON和JavaScript添加额外的html列表元素
- 范围和列表元素在 DIV 中换行
- JavaScript DOM:在容器中查找元素索引
- 访问可扩展QML应用程序中的列表视图索引
- jQuery:影响相同深度的列表元素
- 所选列表元素不会保持选中状态(通过ajax请求更新后)
- 通过javascript中的元素索引访问eventListener中的元素
- 一次显示n个列表元素,jQuery
- 将列表元素宽度设置为文本宽度
- 选择列表元素(捕获向下/向上箭头)
- 限制要在嵌套列表jQuery中添加的列表元素的数量
- jQuery:如何获取列表元素的索引
- 列表类元素(索引).渐变(某些速度)不起作用
- 使用jQuery更改列表元素索引