通过Javascript填充innerHTML在IE9中不起作用

通过Javascript填充innerHTML在IE9中不起作用,javascript,internet-explorer,innerhtml,Javascript,Internet Explorer,Innerhtml,我有一个HTML表单,其中有一个+标记。我想通过Javascript对选项列表进行排序。我写了一段代码,可以在Chrome、Firefox、Safari和Opera中使用,但不能在Internet Explorer中使用。我正在粘贴下面的Javasript代码。我的代码中缺少什么 window.onload = function () { categoryOptions = $('category').innerHTML; $('category').innerHTML = sortCatego

我有一个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; 
} 
函数分类选项(分类选项){
var eachOption=类别选项。拆分(“”);
对于(变量i=0;i<(eachOption.length-1);i++){
每个选项[i]=每个选项[i]+'';
}
eachOption.sort();
选项排序=“”;
对于(变量i=0;i
categoryOptions字段包含以下内容

<option>Option3</option>
<option>Option1</option>
<option>Option2</option>
<option>Option4</option>
选项3
选择1
选择2
选择4
预期输出

对于初学者来说,您实际上是在寻找一个
标记,我相当确定这不是您的意图。忽略,正如注释中指出的那样,
$
似乎是
document.getElementById
的别名,而不是
jQuery

除此之外,使用
innerHTML
进行排序是一个可怕的想法,因为您依赖
不被浏览器的解析器更改(它总是会更改为

因此,考虑到这一点,并假设您正在处理
,请尝试一下:

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]);
};
window.onload=function(){
var sel=document.getElementById('category'),
arr=[].concat.apply([],sel.children),//将节点列表转换为数组
l=阵列长度,i;
arr.sort(函数(a,b){返回a.text对于(i=0;我为什么要将jquery对象与dom元素混合和匹配?@DanielA.White:我不认为这是jquery。看起来,
$
只是
document.getElementById
的别名。谢谢。这很有效。是的,我使用$作为document.getElementById()的捷径将来,事先告诉人们这一点可能是个好主意;)99.99%的时间你看到的是jQuery。顺便说一句,它在解决方案jQuery或Javascript之上。当上面的脚本在IE6-8中执行时,我遇到了错误,我试图消除错误,但到目前为止还无法…预期的JScript对象。它发生在“arr=[].concat.apply([],sel.children)”行中这很奇怪,这里应该没有语法错误。请尝试
Array.prototype.concat.apply([],sel.children)
,如果仍然不起作用,我将为您提供一个数组帮助器函数的节点列表。