JavaScript IEでElement.insertBeforeがうまく動かない!

JavaScript IEでElement.insertBeforeがうまく動かない!
■ 店頭より得で、予約しやすいオンラインショップ。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、最大6万円のキャッシュバックがある
→ SMARTPHONE STORE

世の中でスマートフォン開発が主流のようですが、弊社では、まだまだPC系の開発も盛んに行なっています。

昔から開発員は決まって「IEの仕様は他のブラウザとえらい違う」という怒りをぶつける対象になってきました。
今回もそんなIEに関するお話です。

insertBefore調査

DOM構造に変更をかける際に、よく使う命令の「insertBefore」で、IEだけ、何故か見え方が違っていたので調査したところ、、他ブラウザと仕様が違っていました。

商用サービスでは、全てのブラウザ(主要ブラウザ「IE」「Chrome」「Firefox」「Opera」)において、同じ挙動を求められるので、開発側としては、同じコードで行なったほうが、バージョン管理も楽になるので、その方法を追求してみました。

構文

var insertedElement = parentElement.insertBefore(newElement,referenceElement);

  • insertedElement 挿入されたノード。
  • parentElement 新しく挿入されるノードの親ノード
  • newElement 挿入されるノード
  • referenceElement newElement が挿入される前にあるノード

ブラウザサポート

Chrome Internet Explorer Firefox (Gecko) Opera Safari (WebKit)
OK OK
※下位verに問題あり。
OK OK OK

上記のようになっています。

IEに関しては、一部に問題があるようです。

私が直面した問題は、挿入したいノードに、子要素を持たない場合、IE8で追加されないということ。

これは、少々厄介な問題でした。

■最新のiPhoneの購入・機種変更なら店頭より得で、予約しやすいオンラインショップ。
機種の頭金や使わないオプションパックをつけて年間何万円も損していませんか?
オンラインショップなら故障のサポートもしっかりしていて最低限の費用。待たされることもありません。
 → ドコモオンラインショップ
 → auオンラインショップ
 → ソフトバンクオンラインショップ

最新のiPhoneを得して乗り換えるなら、最大6万円のキャッシュバックがある
→ SMARTPHONE STORE
がお得です。