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>、それはあなたの意図ではなかったと確信しています。無視してください。コメントで指摘されているように、 ではなく here$のエイリアスのようです。document.getElementByIdjQuery

それとは別に、innerHTML並べ替えを使用することは恐ろしい考えです。ブラウザのパーサーによって変更されないことに依存しているため、さらにそうです</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 に答える