javascript - 一些(JavaScript)事件重新排序有序的 html 选择选项

标签 javascript html

我在 <c:out> 中有一个无序的(通过 jsp <select> -tags 动态生成的)选项列表-标签。 呈现标签后,我使用简单的 JavaScript 函数对其重新排序。

如果我使用 onClick - <select> 的事件处理程序- 元素,我将在网页上获取/查看有序列表。如果我将该函数附加到我的 onLoaded -事件处理程序,该函数将被调用并且调试器向我显示正确的值,但是我的 option 的结果顺序-元素未排序。

如果我在 dom 元素之后添加方法调用,带有普通的 <script> -tag,同样的行为发生。

限制

  • 没有 jQuery
  • 数据源不可排序
  • onClick -处理程序不是探测器解决方案
  • 必须在旧浏览器中工作

JavaScript 源代码

  function sortSelectById(elementId) {
    var list = document.getElementById(elementId);
    var options = []

    for(var i = 0; i < list.length; i++) {
      options[i] = [];
      options[i][0] = list.options[i].text;
      options[i][1] = list.options[i].value;
      options[i][2] = list.options[i].selected;
    }

    options.sort();

    for (var i = 0; i < options.length; i++) {
      list.options[i].text = options[i][0];
      list.options[i].value = options[i][1];
      list.options[i].selected = options[i][2];
    }

    return;
  }

最佳答案

您遇到的问题是由二维数组引起的。 JavaScript 需要被准确告知排序依据。

我们通过将 compareFunction 传递给 Array.prototype.sort() 来做到这一点.

这是一个例子:

function compareFunction(a, b) {
    if (a[0] === b[0]) {
        return 0;
    }
    else {
        return (a[0] < b[0]) ? -1 : 1;
    }
}

function sortSelectById(elementId) {
    var list = document.getElementById(elementId);
    var options = []

    for (var i = 0; i < list.length; i++) {
        options[i] = [];
        options[i][0] = list.options[i].text;
        options[i][1] = list.options[i].value;
        options[i][2] = list.options[i].selected;
    }

    options.sort(compareFunction);

    for (var i = 0; i < options.length; i++) {
        list.options[i].text = options[i][0];
        list.options[i].value = options[i][1];
        list.options[i].selected = options[i][2];
    }
    document.getElementById("select").selectedIndex = 0;
    return;
}

sortSelectById("select");
<select id="select">
    <option>Banana</option>
    <option>Apple</option>
    <option>Orange</option>
    <option>Grape</option>
</select>

compareFunction 借自 this answer

关于javascript - 一些(JavaScript)事件重新排序有序的 html 选择选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29918282/

相关文章:

Javascript 锁定 css 更改显示

javascript - 如何从offcanvas打开offcanvas

css - 滚动 - Div 内的 Div

html - 在您的根目录中有一个索引页面是否至关重要,例如 index.html、index.php

html - 为什么 flex 元素不缩小过去的内容大小?

javascript - Firebase 实时数据库显示用户名 - 网页

javascript - 使用 Ramda 将两个数组与两个不同的键组合在一起

javascript - 如何在不重新加载页面的情况下提交表单

android - 如何将参数发送到 android 中 WebView 中的本地文件?

javascript - 与 attr 混淆以与 mouseover() 和 mouseout()(图像交换)一起使用