Javascript 使用jQuery更改列表元素索引

Javascript 使用jQuery更改列表元素索引,javascript,jquery,dom,indexing,Javascript,Jquery,Dom,Indexing,我有一份清单: <ul> <li class="item_1">element</li> <li class="item_2">element</li> <li class="item_3">element</li> </ul> 发生的情况是,元素正在更改类,但它们处于相同的位置,看起来它们并没有更改索引,而此迭代将作用于以前的DOM列表状态 我怎样才能改变这个,或者别的什么

我有一份清单:

<ul>
    <li class="item_1">element</li>
    <li class="item_2">element</li>
    <li class="item_3">element</li>
</ul>
发生的情况是,元素正在更改类,但它们处于相同的位置,看起来它们并没有更改索引,而此迭代将作用于以前的DOM列表状态


我怎样才能改变这个,或者别的什么?有人能帮忙吗?

如果您只需要重命名这些类,那么您可以这样做,例如

var elements = $("li");
for(var i=0; i<elements.length; i++){
    $(elements[i]).attr("class", "item_" + i);
}
var元素=$(“li”);

对于(var i=0;i我想你要找的是:

reindexItems = function() {
     var items = $('ul li');
     var i = 1;
     items.each(function() {
         $(this).removeAttr('class').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 setItemNumber=函数(项){
$(项目).排序(函数(a,b){
var an=a.attr('class')。替换(“项”,“”)
bn=b.attr(‘类’)。替换(“项_uu2;,”);
如果(an>bn){
返回1;
}
如果(an
我还写了一些解决方案:

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));
    });
};

提供更多相关上下文。演示如何拖放元素。JSFIDLE可以帮助我猜为什么需要通过使用类来标识顺序?您不能使用
索引()吗
的元素?您到底想要什么?您想要向上移动元素??元素正在移动,这样一切都很好,我需要为元素添加新的有序类list@Lukas但是如何调用
setItemNumber()
function?On drop event?您必须提供有问题的功能本身和一个最低限度的示例来复制问题
    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));
    });
};