由于 Firefox 没有 innerText,我使用 textContent 来检索文档正文的文本。但是,textContent 返回正文中的任何内容noscript
和script
标签(可能还有其他标签,我不太确定),这意味着 textContent 看起来与 innerText 通常返回的内容不同。
Firefox 中是否有与 Chrome 的 innerText 函数返回相同输出的等效项?
由于 Firefox 没有 innerText,我使用 textContent 来检索文档正文的文本。但是,textContent 返回正文中的任何内容noscript
和script
标签(可能还有其他标签,我不太确定),这意味着 textContent 看起来与 innerText 通常返回的内容不同。
Firefox 中是否有与 Chrome 的 innerText 函数返回相同输出的等效项?
包含过滤器以不获取某些元素的内容
它们是两个不同的属性——一个是在W3C DOM 3 Core中定义的,另一个是Microsoft 专有属性,已被广泛复制但没有开放规范。
规范这两者的最佳方法可能是不使用它们,而是使用收集文本节点并创建字符串的 DOM-walking 例程。对两个(所有)浏览器使用相同的例程。
// 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 作为解决方案。
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));
如果您想让它独立于浏览器,请使用此代码
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;
}
我使用的适用于 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} 上确认,但这是一个开始。