0

我有一个 HTML 表单,其中有一个 + 标记。我想通过 Javascript 对选项列表进行排序。我编写了一个在 Chrome、Firefox、Safari 和 Opera 中工作但在 Internet Explorer 中不工作的代码。我在下面粘贴 Javasript 代码。我的代码中是否缺少某些内容?

window.onload = function () {
categoryOptions = $('category').innerHTML;
$('category').innerHTML = sortCategoryOptions(categoryOptions);
};

sortCategoryOptions() 的函数定义如下:

function sortCategoryOptions(categoryOptions) {
var eachOption = categoryOptions.split('</option>');
for (var i = 0; i < (eachOption.length - 1); i++) {
    eachOption[i] = eachOption[i] + '</option>';
}
eachOption.sort();
optionsSorted = '';
for (var i = 0; i < eachOption.length; i++) {
    optionsSorted = optionsSorted + eachOption[i];
}
return optionsSorted; 
} 

categoryOptions 字段有以下内容

<option>Option3</option>
<option>Option1</option>
<option>Option2</option>
<option>Option4</option>

预期产出

4

1 回答 1

0

对于初学者,您实际上是在寻找一个<category>标签,我很确定这不是您的意图。忽略,正如评论中指出的那样,它看起来$document.getElementById这里的别名,而不是jQuery.

除此之外,使用innerHTMLto sort 是一个可怕的想法,更是如此,因为您依赖于</option>不被浏览器的解析器更改(它总是会更改为</OPTION>

因此,考虑到这一点,并假设您正在研究<select id="category">,试试这个:

window.onload = function() {
    var sel = document.getElementById('category'),
        arr = [].concat.apply([],sel.children), // convert NodeList to array
        l = arr.length, i;
    arr.sort(function(a,b) {return a.text < b.text ? -1 : 1});
    for( i=0; i<l; i++) sel.appendChild(arr[i]);
};
于 2013-03-03T00:18:33.957 回答