从数组中按 id 对 <li> 元素进行排序

Posted

技术标签:

【中文标题】从数组中按 id 对 <li> 元素进行排序【英文标题】:Order <li> elements by id from array 【发布时间】:2021-10-10 04:55:30 【问题描述】:

我使用 Jquery 的 sortable() 创建了一个保存到数据库的数组。该数组包含 ul 中所有 li 项的 li id。它基于拖放功能。

<script>
      $(document).ready(function () 
          $('ul').sortable(
              axis: 'y',
              stop: function (event, ui) 
                  let data = $(this).sortable('toArray');
                  $('span').text(data);
                  $("#HiddenSortOrder").val(JSON.stringify(data))
                  console.log(data);
              
          );
      );
</script>

它产生的数组如下所示:

["13","14","16","15","","1","2","3","4","5","6","7","8","9","10","11","12","17","18","19","20","21","22","23","24","25","26","27","46","52",""]

我正在尝试使用此数组来设置另一个页面上列表的顺序。 li 项如下所示:

<li class="ui-state-default" id="1"><a href="linkOfSomething.php">nameOfSomething</a></li>

到目前为止,我已经找到/想出了:

$data[] = $sortOrderArray;
    <script>
        var sorted = $data[];
        sorted.forEach(function(id) 
            $("#" + id).appendTo("#sortable")
        )
    </script>

或者类似的东西:

array.forEach(function(item) 
  var li = document.createElement("li");
  var text = document.createTextNode(item);
  li.appendChild(text);
  document.getElementById("myUl").appendChild(li);
);

但是,我非常不确定如何正确实现这一点。如果我一开始就走在正确的轨道上。有什么建议吗?

【问题讨论】:

【参考方案1】:

最简单的方法是在加载页面时让 PHP 处理您的订单。如果不可能,因为你只会有一个数组中的值,它可以通过 jQuery 来完成。

你有 jQuery 代码到 html/php 页面吗? 然后您可以执行以下操作:

    <script>
        var sorted = <?= $sortOrderArray; ?>
        sorted.forEach(function(id) 
            $("#" + id).appendTo("#sortable")
        )
    </script>

我不建议这样做,因为我最好不要在我的 HTML/PHP 中使用 JS/jQuery。

【讨论】:

以上是关于从数组中按 id 对 <li> 元素进行排序的主要内容,如果未能解决你的问题,请参考以下文章

在 react-testing-library 中按 id 查找元素

当一些 <ul> 没有 <li> 子元素时,从 <ul> 数组中抓取 <li>

react基础篇四

从数组中按 ID 动态排序 div

javascript 获得ul下的li子元素

jquery查找数组元素是不是存在的问题