IEで作りたてのノードにフィルターを設定する
parentNode が null の状態で、node.filters に触れるとエラーになるため、
var node = document.createElement("div"); node.style.filter = "progid:DXImageTransform.Microsoft.Alpha()"; var filter = node.filters.item("DXImageTransform.Microsoft.Alpha"); // エラー
一時的に親を設定します。
var node = document.createElement("div"); // 一時的にnodeの親となる要素(隠しノードが用意できればそちらのほうがベター) var tmpParent = document.body; tmpParent.appendChild(node); node.style.filter = "progid:DXImageTransform.Microsoft.Alpha()"; var filter = node.filters.item("DXImageTransform.Microsoft.Alpha"); ((snip)) tmpParent.removeChild(node); alert(node.parentNode.nodeType); // 11 = DocumentFragment
IE では、removeChild() 後の node は DocumentFragment に格納された状態になり、parentNode は DocumentFragment を示します。この挙動は IE 独特のものです。
IE以外のブラウザでは、removeChild() 後の parentNode は null になります。