在jquery sortable之后定义<ul>列表中<li>元素的索引

时间:2016-02-15 11:04:44

标签: javascript jquery indexing html-lists jquery-ui-sortable

我希望你可以帮我解决一个小问题。使用我的代码,我想重命名我的ul列表中的元素id,它按jquery sortable排序,但它不能正常工作。有时候它会起作用,但有时只会出现错误:&#34; Uncaught TypeError:无法读取属性&#39; id&#39; of null&#34;并且它的重命名如下:1-2-3-4-5-6-6-8。也许你可以帮助我。

这是我的ul:

<ul class="example">
    <li id="1" class="example"></li>
    <li id="2" class="example"></li>
    <li id="3" class="example"></li>
    <li id="4" class="example"></li>
    <li id="5" class="example"></li>
    <li id="6" class="example"></li>
</ul>

js for jquery sortable:

$('.example').sortable();

以及我的js获取实际索引并重命名li id:

function myFunction(){
    var lenght = $(".example").length;
    lenght = lenght -1;

    for (var i=1; i<=lenght; i++){
        var newIn = $('#'+i).index();
        newIn = newIn +1;
        var inold = document.getElementById(i).id;


    if(newIn != inold){
        var change = document.getElementById(i).id = newIn;
        }
    }
}

谢谢你给我一个提示!

2 个答案:

答案 0 :(得分:0)

感谢您提示CBroe!它的工作就像一个魅力吧!

    function myFunction(){
$(".example").each(function(i) {
    var row = $(this)
    row.attr('id', '' + i);
});
}

答案 1 :(得分:0)

如果您有重复ID的列表,则会发生此错误,或者不是继续ID,例如(3,2,4,1,6)&#39; 5&#39;缺少,您只是通过访问序列号来替换ID,即“我”。所以当我到达5然后&#34; document.getElementById(i).id&#34;这会给你&#39; -1&#39;因为id = 5没有li。我希望这段代码可以帮助您解决问题。

function myfunction(){
$("li.example").each(function() {
        var currentId = $(this).attr("id"); //id of each li
        var newIn = $(this).index(); //index of each li starts from 0
        newIn++;
        if(currentId!==newIn)
        {
            $(this).attr("id",newIn);
        }
    });
}