Javascript:按时间顺序对用户输入进行排序

标签 javascript html css

希望我没有想太多。我应该如何按时间顺序对用户输入进行排序,使最旧的电影首先显示在新排序的列表中?

示例:

1980 - 帝国反击
1996 年 - 独立日
1997 - 泰坦尼克号

HTML

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>

<body>

    <form>
        Year: <br>
        <input id="year" type="text"><br>
        Movie:<br>
        <input id="mName" name="MovieName" type="text"><br>
    </form>
    <br>
    <button onclick="myFunction(list)" type="submit">Submit</button>

    <div id="container">
        <ul id="list">
        </ul>
    </div>
    <script src="assets/js/main.js">

    </script>
</body>
</html>

JS

function myFunction(list){
    var text = "";
    var inputs = document.querySelectorAll("input[type=text]");
    for (var i = 0; i < inputs.length; i++) {
        text +=  inputs[i].value;
    }


    var li = document.createElement("li");
    var node = document.createTextNode(text);
    li.appendChild(node);
    document.getElementById("list").appendChild(li);
}

最佳答案

Update the DOM after every insertion of the li Element.

  • 不要将 yearname 作为纯文本插入,而是将其包装在 span 中以便使用 DOM 访问 - api(querySelector/All)

  • 使用Array.from类数组可迭代对象创建新的数组实例

  • 使用 Array#sort 对集合进行排序

  • sorted数组附加到Array#forEach中的父UL元素循环

function myFunction(list) {
  var text = "";
  var inputs = document.querySelectorAll("input[type=text]");
  for (var i = 0; i < inputs.length; i++) {
    text += '<span>' + inputs[i].value + '</span>';
  }
  var li = document.createElement("li");
  li.innerHTML = text;
  document.getElementById("list").appendChild(li);
  var liElemens = document.querySelectorAll('#container #list li');
  liElemens = Array.from(liElemens);
  liElemens.sort(function(a, b) {
    var aSpan = +a.children[0].textContent;
    var bSpan = +b.children[0].textContent;
    return aSpan > bSpan;
  });
  var parent = document.querySelector('#list');
  while (parent.hasChildNodes()) {
    parent.removeChild(parent.firstChild);
  }
  liElemens.forEach(function(elem) {
    parent.appendChild(elem);
  });
}
<form>
  Year:
  <br>
  <input id="year" type="text">
  <br>Movie:
  <br>
  <input id="mName" name="MovieName" type="text">
  <br>
</form>
<br>
<button onclick="myFunction(list)" type="submit">Submit</button>

<div id="container">
  <ul id="list">
  </ul>
</div>

关于Javascript:按时间顺序对用户输入进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38045222/

相关文章:

javascript - 如何在谷歌图表中刷新页面后停止 x 轴文本相互重叠

Javascript混淆对象函数 "has no method"错误

html - 居中和底部对齐 flex 元素

html - 在移动设备浏览器中隐藏地址栏

javascript - PHP使用php jquery ajax显示和隐藏数据

javascript - 如何从数据库中获取当前日期到最近 5 天的值

html - 我无法在超大屏幕图像上放置彩色叠加层

javascript - Twitter Bootstrap 输入标签在()之前不适用于 Jquery

javascript - 如何使相对 Div 可拖动?

html - 保持 block 元素水平