对< li>进行排序< Ul>的元素根据< span>中的文字在< li>内部 [英] Sorting <li> elements of a <Ul> according to text in <span> inside <li>

查看:58
本文介绍了对< li>进行排序< Ul>的元素根据< span>中的文字在< li>内部的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在<ul>中有一个嵌套的<ul>,如<ul>,并且<ul>下的所有<li>都包含<span>.我想根据字母<span>

I have a nested <ul> like <ul> with in <ul> and all <li> under <ul> have <span> in them. I want to sort all <li> items in alphabetical order according to text in their respective <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>中的所有元素都是动态生成的.

root <ul id="rootUl"> will always be there but all elements inside this <ul> are generated dynamically.

目前,我正在尝试获取数组中<ul id="rootUl">下的所有<ul>并将它们逐个传递给排序功能.

currently I am trying to get all <ul> under <ul id="rootUl"> in array and pass them to sorting function one by one.

这是小提琴 http://jsfiddle.net/6tvzhkvk/2/

给定样本的预期结果将是

the expected result for given sample will be like

<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>

这篇关于对&lt; li&gt;进行排序&lt; Ul&gt;的元素根据&lt; span&gt;中的文字在&lt; li&gt;内部的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆