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 から続く呪縛ですね。