Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript通过li属性循环并更改每个项的值_Javascript_Jquery_List - Fatal编程技术网

javascript通过li属性循环并更改每个项的值

javascript通过li属性循环并更改每个项的值,javascript,jquery,list,Javascript,Jquery,List,我想循环一组元素,更新其中的值,并在文档中显示 我之所以这样做是因为我想按顺序对元素列表进行排序。我在JQuery中使用Sortable来实现这一点 <li> 1 </li> <li> 2 </li> <li> 3 </li> <li> 4 </li> <li> 5 </li> 1 二, 三, 四, 五, 该命令可成为: <li> 3 </li&g

我想循环一组
  • 元素,更新其中的值,并在文档中显示

    我之所以这样做是因为我想按顺序对元素列表进行排序。我在JQuery中使用Sortable来实现这一点

    <li> 1 </li>
    <li> 2 </li>
    <li> 3 </li>
    <li> 4 </li>
    <li> 5 </li>
    
  • 1
  • 二,
  • 三,
  • 四,
  • 五,
  • 该命令可成为:

        <li> 3 </li>
        <li> 1 </li>
        <li> 4 </li>
        <li> 2 </li>
        <li> 5 </li>
    
  • 3
  • 一,
  • 四,
  • 二,
  • 五,
  • 然后单击一个按钮,我希望我的JS函数将li项的值更改回1,2,3,4,5。值得一提的是,我并不是在寻找一个解决方案,以恢复到以前的列表

    谢谢。

    这应该可以(从jQuery 1.4开始):

    这应该是可行的(从jQuery 1.4开始):


    我想你宁愿重新排列列表项,而不是它们的内容。这样,您就不会丢失任何
    li
    的属性/类/。。。您可以保持DOM元素的完整性,只需更改一些
    ul
    子元素的顺序

    我发现了一个很好的小片段DoDoIt:

    你唯一需要做的就是记住最初的顺序

    function mysortA( a, b ) {
       var compA = $(a).text().toUpperCase();
       var compB = $(b).text().toUpperCase();
       return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;    
    }
    function mysortB( a, b ) {
      return   a.originalindex < b.originalindex ? -1 
             : a.originalindex > b.originalindex ?  1 
             : 0;
    }
    
    然后您可以按一种方式进行排序:

    // sort them using your sort function
    listitems.sort( mysort )
    // rebuild the list container
    listitems.each( function(idx, itm) { mylist.append(itm); });
    
    然后进行排序:

    var ul=$('ul');
    ul.children('li').get().sort(mysortB).each(function(i,li){ ul.append(li); });
    

    注意:未经测试-抓住这个想法。

    我认为您更愿意对列表项进行重新排序,而不是对其内容进行排序。这样,您就不会丢失任何
    li
    的属性/类/。。。您可以保持DOM元素的完整性,只需更改一些
    ul
    子元素的顺序

    我发现了一个很好的小片段DoDoIt:

    你唯一需要做的就是记住最初的顺序

    function mysortA( a, b ) {
       var compA = $(a).text().toUpperCase();
       var compB = $(b).text().toUpperCase();
       return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;    
    }
    function mysortB( a, b ) {
      return   a.originalindex < b.originalindex ? -1 
             : a.originalindex > b.originalindex ?  1 
             : 0;
    }
    
    然后您可以按一种方式进行排序:

    // sort them using your sort function
    listitems.sort( mysort )
    // rebuild the list container
    listitems.each( function(idx, itm) { mylist.append(itm); });
    
    然后进行排序:

    var ul=$('ul');
    ul.children('li').get().sort(mysortB).each(function(i,li){ ul.append(li); });
    

    注意:未经测试-抓住想法。

    是顺序1、2、3、4。。。总是吗?在这种情况下,您可以遍历项目(每个方法)并相应地设置它们的索引。无需担心旧值,只需重写。:)是的,这就是我试图做的,循环通过并覆盖我所期望的。最好的方法是什么?我猜是$elems.each(函数(索引){this.html(索引)});我会成功的。我的jQuery fu在atm中的状态有点糟糕,但希望您可以基于此导出解决方案。:)是序列1,2,3,4。。。总是吗?在这种情况下,您可以遍历项目(每个方法)并相应地设置它们的索引。无需担心旧值,只需重写。:)是的,这就是我试图做的,循环通过并覆盖我所期望的。最好的方法是什么?我猜是$elems.each(函数(索引){this.html(索引)});我会成功的。我的jQuery fu在atm中的状态有点糟糕,但希望您可以基于此导出解决方案。:)聪明。很高兴看到您可以将func直接传递给“text”方法。很酷的解决方案,很聪明。很高兴看到您可以将func直接传递给“text”方法。冷却液。