web-dev-qa-db-ja.com

(element.innerHTML == "")がFirefoxで機能しない理由

if (element.innerHTML == "")がFirefoxで機能しないのはなぜですか

しかし、IEで正常に動作します、何かアイデアはありますか?

17
Mahmoud Farahat

HTMLを見ずに言うのは難しいですが、おそらく要素に空の空白があり、IEはそれをテキストノードとして扱いませんが、FFは扱います。

タグ間の空白をテキストノードとして扱うことは、実際にはより厳格な標準準拠であると思いますが、IEは準拠していません。

あなたができること:

var htmlstring = element.innerHTML;

  // use the native .trim() if it exists
  //   otherwise use a regular expression  
htmlstring = (htmlstring.trim) ? htmlstring.trim() : htmlstring.replace(/^\s+/,'');

if(htmlstring == '') {...

または、HTMLマークアップの空白を手動で削除します。

19
user113716

最良の結果を得るには、element.innerHTML.trim() == ""かどうかを確認できます。ただし、trim()メソッドを使用して文字列プロトタイプを拡張する必要があります。

if (!String.prototype.trim) {
    String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
}

if (element.innerHTML.trim() == "") {
  //do something
}
5
naivists

空の文字列をチェックする別の方法は、長さをチェックすることです。

_element.innerHTML.length == 0
_

ただし、一致させたい空白文字列がある場合は、trim()する必要があります。

5
palswim

私にとって、innerHTMLの設定はFirefoxでもChromeでも機能していないように見えましたが、エラーのためにIEでは機能しました。そもそもgetElementByIdを使用して要素を取得したことがないことが判明しました。 IEは、name=getElementByIdで定義された要素で問題なく動作するようですが、FirefoxChromeはより厳密で、id=要素のみを受け入れます。 (私の見解ではより正確に)これが誰かの欲求不満を救うことを願っています。
なぜIEこのようなことをして、人々を混乱させるのか...

1
Third