为了账号安全,请及时绑定邮箱和手机立即绑定

从类中获取信息并将其转换为数组

从类中获取信息并将其转换为数组

BIG阳 2021-05-10 10:46:17
我当前正在构建一个排序系统,我想对这四个元素进行排序,这四个元素都具有相同的类。      function sortByOrdnr() {        var allaOrdnr = document.getElementsByClassName("ordernummer");        var antal = allaOrdnr.length;        var listWithAllaOrdnr = [];        for (var i = 0; i < antal; i++) {          listWithAllaOrdnr.push(allaOrdnr[i]);        }        listWithAllaOrdnr.sort() // [A, B, C, E]        console.log(listWithAllaOrdnr);        for (var i = 0; i < antal; i++) {          document.getElementsByClassName("ordernummer")[i] = listWithAllaOrdnr[i];        }      }<button onclick="sortByOrdnr()"> Button </button>    <p class="ordernummer"> A </p>    <p class="ordernummer"> E </p>    <p class="ordernummer"> B </p>    <p class="ordernummer"> C </p>最后,我希望类更改位置,以便在单击按钮时对四个元素进行排序,如下所示:<p class="ordernummer"> A </p><p class="ordernummer"> B </p><p class="ordernummer"> C </p><p class="ordernummer"> E </p>我感谢所有的帮助。提前致谢。
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

我将使用普通的ES6 JS提供另一个DOM版本,该版本根据HTMLTexts的textContent对HTMLElements进行排序。这是一个辅助函数,我部分是从对另一个问题的回答中得出的。


HTMLCollection.prototype.sort = function() {

  [...this]

    .sort( (a, b) => a.textContent.localeCompare(b.textContent) )

    .forEach( (val) => val.parentNode.appendChild(val) );

}

包括此之后,您可以直接在NodeList上使用.sort()。


演示:


function sortByOrdnr() {

  var allaOrdnr = document.getElementsByClassName("ordernummer");

  allaOrdnr.sort();

}


HTMLCollection.prototype.sort = function() {

  [...this]

    .sort( (a, b) => a.textContent.localeCompare(b.textContent) )

    .forEach( (val) => val.parentNode.appendChild(val) );

}

<button onclick="sortByOrdnr()"> Button </button>


<p class="ordernummer"> A </p>

<p class="ordernummer"> E </p>

<p class="ordernummer"> B </p>

<p class="ordernummer"> C </p>


查看完整回答
反对 回复 2021-05-27
?
精慕HU

TA贡献1845条经验 获得超8个赞

这是DOM版本


function sortByOrdnr() {

  const oDiv = document.getElementById("container");

  const ps = oDiv.querySelectorAll("p");

  let vals = [];

  ps.forEach(p => vals.push(p.textContent));

  let sortArr = vals.slice(0);

  sortArr.sort().forEach(val => {

    oDiv.appendChild(ps[vals.indexOf(val)])

  })

}

<button onclick="sortByOrdnr()"> Button </button>

<div id="container">

  <p class="ordernummer"> A </p>

  <p class="ordernummer"> E </p>

  <p class="ordernummer"> B </p>

  <p class="ordernummer"> C </p>

</div>


查看完整回答
反对 回复 2021-05-27
?
暮色呼如

TA贡献1853条经验 获得超9个赞

以下代码段可能会对您有所帮助,您应该使用它.innerHTML来设置新内容:


    function sortByOrdnr() {

        var allaOrdnr = document.getElementsByClassName("ordernummer");

        var antal = allaOrdnr.length;

        var listWithAllaOrdnr = [];

        for (var i = 0; i < antal; i++) {

          listWithAllaOrdnr.push(allaOrdnr[i].innerText);

        }

        listWithAllaOrdnr.sort() // [A, B, C, E]

        for (var i = 0; i < antal; i++) {

          allaOrdnr[i].innerHTML = listWithAllaOrdnr[i];

        }

      }

<button onclick="sortByOrdnr()"> Button </button>


    <p class="ordernummer"> A </p>

    <p class="ordernummer"> E </p>

    <p class="ordernummer"> B </p>

    <p class="ordernummer"> C </p>


查看完整回答
反对 回复 2021-05-27
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信