IE で動作する次の JavaScript コードがあります。
myElement.innerText = "foo";
ただし、'innerText' プロパティは Firefox では機能しないようです。Firefox に相当するものはありますか? または、より汎用的で、ブラウザー間で使用できるプロパティはありますか?
ベストアンサー1
更新:私は書いたすべての違いを詳しく説明したブログ投稿ずっといい。
Firefox は W3C 標準を使用しますNode::textContent
が、その動作は MSHTML 独自の動作とは「わずかに」異なりますinnerText
(Opera も、しばらく前に他の数十の MSHTML 機能とともにこれをコピーしました)。
まず、textContent
空白の表現が異なりますinnerText
。次に、より重要な点として、innerTexttextContent
には SCRIPT タグの内容がすべて含まれますが、innerText には含まれません。
物事をもっと面白くするために、Opera は標準を実装するだけでなくtextContent
、MSHTML も追加することを決定しましたinnerText
が、それを次のように動作するように変更しました。つまり、SCRIPT コンテンツを含めるように変更しましたtextContent
(実際、textContent
OperainnerText
では、おそらく互いにエイリアスされているだけなので、同じ結果が生成されているようです)。
textContent
Node
はインターフェースの一部ですが、innerText
は の一部ですHTMLElement
。これは、たとえば、テキスト ノードからは「取得」できtextContent
ないことを意味します。innerText
var el = document.createElement('p');
var textNode = document.createTextNode('x');
el.textContent; // ""
el.innerText; // ""
textNode.textContent; // "x"
textNode.innerText; // undefined
最後に、Safari 2.x にもバグのあるinnerText
実装があります。Safari では、innerText
要素が ( によってstyle.display == "none"
) 非表示になっていないか、ドキュメントから孤立していない場合にのみ、 は適切に機能します。それ以外の場合は、innerText
空の文字列になります。
私は抽象化を試みたがtextContent
(これらの欠陥を回避するために)、結局かなり複雑。
最初に正確な要件を定義し、そこから進めるのが最善策です。すべての可能性のある逸脱innerHTML
に対処するのではなく、要素からタグを削除するだけで済む場合がよくあります。textContent
innerText
もちろん、別の可能性としては、DOM ツリーをたどってテキスト ノードを再帰的に収集することが挙げられます。