IEが糞過ぎて困る.

これははまる人が他にも居そうだなあ.


よくある前のSelectで選択された内容に応じて,次のSelectの内容を変えるJavaScriptを書いてたんだけど,どうもIEで動かないからおかしいなあと思っていろいろ試してみた.


function overrideOptions(target, array) {
var select = document.getElementById(target);
while(select.length != 0) select.remove(0);
for(opt in array) {
if(array[opt].value == null || array[opt].text == null) continue;
var elem = document.createElement("option");
elem.setAttribute("value", array[opt].value);
var textNode = document.createTextNode(array[opt].text);
elem.appendChild(textNode);
select.add(elem,null);
}
}
太字の部分がIEで動かない部分.
要は,DOM1のHTMLSelectElement.add(in HTMLElement element,in HTMLElement before)が実装されていないという罠.
removeは動くのでまさかそんなことはないだろうと思ったが….
んで,この部分を

select.appendChild(elem);
としてやると大丈夫.さすがにコアはちゃんと動くのね.
addで引数にnullじゃなくて,ちゃんとelementを指定してやればいいのかもしれないけど,そこまで試す気もないしね.


下らないことで時間を取ってしまったよ.それにしても,DOM1レベルですらちゃんと実装できてないなんて….IEってば本当に何なんだ.