if (element.innerHTML == "")
がFirefoxで機能しないのはなぜですか
しかし、IEで正常に動作します、何かアイデアはありますか?
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マークアップの空白を手動で削除します。
最良の結果を得るには、element.innerHTML.trim() == ""
かどうかを確認できます。ただし、trim()
メソッドを使用して文字列プロトタイプを拡張する必要があります。
if (!String.prototype.trim) {
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
}
if (element.innerHTML.trim() == "") {
//do something
}
空の文字列をチェックする別の方法は、長さをチェックすることです。
_element.innerHTML.length == 0
_
ただし、一致させたい空白文字列がある場合は、trim()
する必要があります。
私にとって、innerHTML
の設定はFirefox
でもChrome
でも機能していないように見えましたが、エラーのためにIE
では機能しました。そもそもgetElementById
を使用して要素を取得したことがないことが判明しました。 IE
は、name=
とgetElementById
で定義された要素で問題なく動作するようですが、Firefox
とChrome
はより厳密で、id=
要素のみを受け入れます。 (私の見解ではより正確に)これが誰かの欲求不満を救うことを願っています。
なぜIEこのようなことをして、人々を混乱させるのか...