javascript - 根据 <li> 内 <span> 中的文本对 <Ul> 的 <li> 元素进行排序

标签 javascript jquery html sorting

我有一个嵌套的<ul>喜欢 <ul><ul>以及所有<li><ul><span>在他们中。我想对所有 <li> 进行排序项目根据各自的文本按字母顺序排列<span>

这是示例

<ul id="rootUl">
  <li>
   <span>zz</span>
  </li>
  <li>
    <ul>
      <li><span>rr</span></li>
      <li><span>bb</span></li>
      <li><span>hh</span></li>
    </ul>
  <li>
   <span>kk</span>
  </li>
  <li>
   <span>mm</span>
  </li>

 </ul>

<ul id="rootUl">将永远存在,但此 <ul> 中的所有元素动态生成。

目前我正在尝试获取所有 <ul><ul id="rootUl">放入数组中并将它们一一传递给排序函数。

这是 fiddle http://jsfiddle.net/6tvzhkvk/2/

给定样本的预期结果如下

<ul id="rootUl">
  <li>
   <span>kk</span>
  </li>
  <li>
    <ul>
      <li><span>bb</span></li>
      <li><span>hh</span></li>
      <li><span>rr</span></li>
    </ul>
  <li>
   <span>mm</span>
  </li>
  <li>
   <span>zz</span>
  </li>

 </ul>

最佳答案

// for each <ul> separately
$('#rootUl ul, #rootUl').each(function(_, ul) {

  // get all the nodes to be sorted
  var $toSort = $(ul).children('li').children('span');

  // extract the text
  var values = $toSort.get().map(function(span) {
    return span.textContent;
  });

  // sort the text
  values.sort();

  // shove reordered texts back into the original elements
  values.forEach(function(value, index) {
    $toSort[index].textContent = value;
  });
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="rootUl">
  <li>
   <span>zz</span>
  </li>
  <li>
    <ul>
      <li><span>rr</span></li>
      <li><span>bb</span></li>
      <li><span>hh</span></li>
    </ul>
  <li>
    <span>kk</span>
  </li>
  <li>
    <span>mm</span>
  </li>
</ul>

关于javascript - 根据 <li> 内 <span> 中的文本对 <Ul> 的 <li> 元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29407964/

相关文章:

jquery - 将 UpdatePanel 替换为 JQuery

jquery - :even & :odd - resetting after each sub heading

html - Github 页面未在子文件夹上加载 css

html - Flex 布局中的动态列宽

javascript - 单击模式“同意”按钮时未选中复选框

javascript - 过滤条件下划线

javascript - 如何创建用于模式切换的jquery计数器函数

javascript - 有 2 列的 html 文档样式的名称是什么?

javascript - 这个运算符 ~= 在 jquery 中是什么意思?

html - 将两个div中的div与不同的float对齐