Firefox には innerText がないため、textContent を使用して文書の本文のテキストを取得しています。ただし、textContent は本文内のnoscript
およびscript
タグ (および他のタグかもしれませんが、よくわかりません) 内のすべてのものを返します。
Chrome の innerText 関数と同じ出力を返す Firefox に相当するものはありますか?
Firefox には innerText がないため、textContent を使用して文書の本文のテキストを取得しています。ただし、textContent は本文内のnoscript
およびscript
タグ (および他のタグかもしれませんが、よくわかりません) 内のすべてのものを返します。
Chrome の innerText 関数と同じ出力を返す Firefox に相当するものはありますか?
特定の要素のコンテンツを取得しないためのフィルターが含まれています
これらは 2 つの異なるプロパティです。1 つはW3C DOM 3 Coreで定義されており、もう 1 つはMicrosoft 独自のプロパティであり、広くコピーされていますが、オープンな仕様はありません。
おそらく、この 2 つを正規化する最善の方法は、それらを使用せず、テキスト ノードを収集して文字列を作成する DOM ウォーキング ルーチンを使用することです。両方 (すべて) のブラウザーに同じルーチンを使用します。
// Get the text within an element
// Doesn't do any normalising, returns a string
// of text as found.
function getText(element) {
var text = [];
var self = arguments.callee;
var el, els = element.childNodes;
var excluded = {
'noscript': 'noscript',
'script' : 'script'
};
for (var i=0, iLen=els.length; i<iLen; i++) {
el = els[i];
// May need to add other node types here
if ( el.nodeType == 1 &&
!(el.tagName.toLowerCase() in excluded)) {
text.push(self(el));
// If working with XML, add nodeType 4 to get text from CDATA nodes
} else if (el.nodeType == 3) {
// Deal with extra whitespace and returns in text here.
text.push(el.data);
}
}
return text.join('');
}
これを参照してください:
http://www.davidtong.me/innerhtml-innertext-textcontent-html-and-text/
基本的には jQuery の text() メソッドを使用できますが、改行も必要な場合は、その URL に独自のプラグイン コードがあります。
2 つのブラウザーが異なる場合は常に、解決策として jQuery を調査することをお勧めします。
ブラウザに依存しないようにする場合は、このコードを使用してください
var field = document.getElementById(id); // where u want to use innertext
if(field != null)
{
if(navigator.appName == "Netscape") // appName for both FireFox and Chrome its is "Netscape" i checked it with different version.
field.textContent = value;
else // for For IE v 8 i checked .textContent is not supported by IE for me it was not working.
field.innerText = value;
}
function deepText(node) {
var A= [];
if(node) {
node= node.firstChild;
while(node!= null) {
if(node.nodeType== 3) {
if(/\S/.test(node.data)) A[A.length] = node.data;
}
else A = A.concat(deepText(node));
node = node.nextSibling;
}
}
return A;
}
alert(deepText(document.body));
Linux 上の Chromium と Firefox の両方で機能する私が使用した解決策childNodes
は、オブジェクトの に対処することでした。各ノードにはtextContent
、テキストのみを返す有効なプロパティがあります。
var element = document.getElementById(element_id);
// here element_id is an element which contains text, then
// a child <p> whose text will be used for something else.
// e.g. <li>string1<p>string2</p></li>
var first = element.childNodes[0].textContent; // string1
var second = element.childNodes[1].textContent; // string2
もちろん、これはモバイル ブラウザ、IE * shudder * およびバージョン {alpha .. omega} で確認する必要がありますが、それは出発点です。