label要素のfor属性をgetAttributeで取るときの注意
こんにちは。久々にブラウザの違いによる問題に遭遇したのでシェアしておきたいと思います。
label要素のfor属性を抜き出す処理は以下のようにすればFirefoxで取得することができます。
var labels = document.getElementsByTagName("label");
for (var i = 0; i < labels.length; i++) {
var attr = labels[i].getAttribute("for");
alert(attr);
}
でもInternet Explorer、通称IEでは変数attrはnullになります。
なぁにぃ~
で、調べたところ、グッドな記事を発見しました。
Web Bug Track: bug 217 - getAttribute doesn't always work in IE
getAttributeにはバグがあるようなので、DOMの値を直接参照しちゃおうという展開です。
var labels = document.getElementsByTagName("label");
for (var i = 0; i < labels.length; i++) {
var attr = labels[i].attributes['for'].nodeValue;
alert(attr);
}
はい。これなら大丈夫。IEでもFxでもちゃんと値が取れました。
うひー。DOMについてブラウザ間の実装差がなくなる世の中になってもらいたいものですね。
追記 14:48
Fxでは labels[i].attributes['for'].nodeValue が動かなかったす。Fxでは getAttribute('for')が動くのでそっちをみてください。
Comments