javascript - 按标签对复选框进行排序

标签 javascript jquery html

所以我有这些带有疯狂 ID 的复选框,因为我无法更改的原因。例如:

<td>
    <span title=BBB class="ms-RadioText">
        <input id = Checkbox1 type=checkbox/>
        <label for="Checkbox1">BBB</label>
    </span>
    <span title=AAA class="ms-RadioText">
        <input id = Checkbox2 type=checkbox/>
        <label for="Checkbox2">AAA</label>
    </span>
</td>

当然,它们不按字母顺序排列。由于我不允许更改 HTML 中复选框的顺序,因此如何使用 native JavaScript、JQuery 或 CSS 按字母顺序对其进行排序?

最佳答案

jQuery排序并读取title属性

$('td').each(function() {
  var td = $(this)
  td.find('span').sort(function(a, b) {
    return a.title.localeCompare(b.title)
  }).appendTo(td)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr>
    <td>
      <span title=BBB class="ms-RadioText">
        <input id="Checkbox1" type="checkbox"/>
        <label for="Checkbox1">BBB</label>
    </span>
      <span title=AAA class="ms-RadioText">
        <input id="Checkbox2" type="checkbox"/>
        <label for="Checkbox2">AAA</label>
    </span>
    </td>
  </tr>
  <tr>
    <td>
      <span title=FFF class="ms-RadioText">
        <input id="Checkbox1b" type="checkbox"/>
        <label for="Checkbox1b">FFF</label>
    </span>
      <span title=ZZZ class="ms-RadioText">
        <input id="Checkbox2b" type="checkbox"/>
        <label for="Checkbox2b">ZZZ</label>
    </span>
      <span title=EEE class="ms-RadioText">
        <input id="Checkbox3b" type="checkbox"/>
        <label for="Checkbox3b">EEE</label>
    </span>
    </td>
  </tr>

</table>

没有 jQuery

document.querySelectorAll('td').forEach(function(td) {
  const spans = td.querySelectorAll('span')
  const ordered = Array.from(spans).sort( function (a,b) {
    return a.title.localeCompare(b.title)
  })
  var frag = ordered.reduce(function (frag, span){
    frag.appendChild(span)
    return frag
  }, document.createDocumentFragment())
  td.appendChild(frag)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr>
    <td>
      <span title=BBB class="ms-RadioText">
        <input id="Checkbox1" type="checkbox"/>
        <label for="Checkbox1">BBB</label>
    </span>
      <span title=AAA class="ms-RadioText">
        <input id="Checkbox2" type="checkbox"/>
        <label for="Checkbox2">AAA</label>
    </span>
    </td>
  </tr>
  <tr>
    <td>
      <span title=FFF class="ms-RadioText">
        <input id="Checkbox1b" type="checkbox"/>
        <label for="Checkbox1b">FFF</label>
    </span>
      <span title=ZZZ class="ms-RadioText">
        <input id="Checkbox2b" type="checkbox"/>
        <label for="Checkbox2b">ZZZ</label>
    </span>
      <span title=EEE class="ms-RadioText">
        <input id="Checkbox3b" type="checkbox"/>
        <label for="Checkbox3b">EEE</label>
    </span>
    </td>
  </tr>

</table>

关于javascript - 按标签对复选框进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611620/

相关文章:

javascript - 一个涉及 JavaScript 对象结构的错误

javascript - 使页面在固定 DIV 内滚动

jquery - 获取具有特定标签的子元素 jQuery

javascript - 尝试生成特定范围内的随机整数,然后将其显示为内联

javascript - 如何创建对匿名 addEventListener 处理程序的引用?

javascript - 如何配置 mocha 以递归方式查找所有测试文件?

javascript - jQuery 如果对象存在

html - CSS网站帮助请

Javascript:onClick 复选框更改 div 颜色

javascript - :hover 的纯 JavaScript 替换