IE6 はノードに追加したオレオレプロパティが消せない(delete document.body.hoge が出来ない)
オレオレ要素が消せない → オレオレプロパティが消せない
余談だけどそれは「属性(アトリビュート)」またはJS的に「プロパティ」と呼ぶものだと思う。「要素」だとHTML要素のことだと思ってしまう。
by Yuichirou
たしかに。 Yuichirou さん ありがとう!
本文
document.body.hoge = {}; delete document.body.hoge; // IE6 でエラーになる, IE8 は大丈夫
delete ではなく、こうします。
document.body.hoge = {}; document.body.hoge = void 0;
document.body に限らず、Node だとダメなようです。IE7でどうなるかは試してません。
IE以外のブラウザは、どちらの方法でもオレオレプロパティを削除できます。
追記
『試したのはIE6だけですが、removeAttributeでいけるっぽいです。
javascript:document.body.oreore=1;alert(document.body.oreore);document.body.removeAttribute('oreore');alert(document.body.oreore);
で1、undefinedに』
by os0x
IE 以外のブラウザは document.body.hoge = ... としても、attributes で取れる値は変化しませんが、IE は触れるようになります。
document.body.hoge = "oreore"; var attr = document.body.attributes; alert(attr["hoge"].value); // IE 以外ではエラーになる, IE だと "oreore" が表示される。
以下のコードを追試してみました。
IE6〜IE8 なら "oreore" -> "undefined" と、IE以外(Safari3.1+, Chrome2+, Opera9.2+, Firefox2+)は "ERROR1" -> "oreore" と表示されます。
<!doctype html><html><head><title></title></head><body><script> window.onload = function() { document.body.hoge = "oreore"; var attr = document.body.attributes; // get Attr try { alert(attr["hoge"].value); // IE なら "oreore" を表示 } catch(err) { alert("ERROR1"); // IE 以外なら "ERROR1" を表示 } // IE 以外だと、属性が元々追加されてないので remove もできない // IE だと document.body.hoge が remove される document.body.removeAttribute("hoge"); alert(document.body.hoge); // IE なら "undefined", IE 以外なら "oreore" } </script></body></html>
IE6〜IE8 で document.body.removeAttribute("hoge") が効いてしまうのは IE6 から続く呪縛ですね。