我使用以下脚本从HTML Table获取值。如果我使用 innerText ,它将适用于IE和Chrome Fine.But FireFox显示错误:row.cells [ 0] .innerText未定义源。如果我使用 textContent 它将在Chrome和FireFox中正常工作。但IE显示以下错误 cells.0.textContent'为null或不是对象。如何更改此脚本在 IE,Chrome,FireFox 上工作,没有错误?我使用c = row.cells [0] .innerText.strip(); 或 c = row.cells [0] .textContent.strip();
function a()
{
var table = getServerObject("b");
var row,c;
for (var i = 2; i < table.rows.length - 1; i++)
{
row = table.rows[i];
if(row.cells.length==1)continue;
c= row.cells[0].innerText.strip(); //It was work in chrome and IE (or)
c=row.cells[0].textContent.strip();//It was work in chrome and FF
if(c==0)
{
//Something
}
}
}
答案 0 :(得分:5)
在使用可用的属性之前进行测试:
var contentEnabled = document.textContent === null;
稍后您有if决定使用哪个属性
if ( contentEnabled ) {
c= row.cells[0].textContent.strip(); // It was work in chrome and FF
} else {
c= row.cells[0].innerText.strip(); // It was work in chrome and IE
}
@RobW建议或更短
c = row.cells[0][contentEnabled ? 'textContent' : 'innerText'].strip();
对于两个属性之间的细微差别,请注意MDN docu on textContent
中的以下内容:
与innerText的区别
Internet Explorer介绍了
element.innerText
。意图与几个不同之处几乎相同:请注意,虽然
textContent
获取了所有元素的内容,包括<script>
和<style>
元素,但大多数等效的特定于IE的属性innerText
却没有。innerText
也知道样式,不会返回隐藏元素的文本,而textContent
会。 由于innerText
知道CSS样式,它会触发重排,而textContent
则不会。
答案 1 :(得分:0)
function a()
{
var table = getServerObject("b");
var row,c;
for (var i = 2; i < table.rows.length - 1; i++)
{
row = table.rows[i];
if(row.cells.length==1)continue;
if(typeof (row.cells[0]) != "undefined"){
c= row.cells[0].innerText.strip(); //It was work in chrome and IE (or)
c=row.cells[0].textContent.strip();//It was work in chrome and FF
if(c==0)
{
//Something
}
}
}
}
答案 2 :(得分:0)
如果你真的想要一种跨浏览器的方式(IE&lt; 9),请使用jQuery。说真的,你会花很多时间来解决这些怪癖。
基于它的灵感,您可以像这样做:使用nodeValue
,这是唯一的跨浏览器方式。但是,nodeValue
不适用于元素,但它适用于textNodes
(full list关于其工作的元素)。
function getText( el ) {
var text = '';
// Recursively get the text
( function recur( el ) {
// If it's a textNode or a CDATA node
if ( el.nodeType === 3 || el.nodeType === 4 ) {
text += el.nodeValue;
}
// If it has childNodes, recursively get their nodeValue
if ( el.hasChildNodes() ) {
for ( var i = 0, l = el.childNodes; i < l; i++ ) {
recur( el.childNodes[ i ] );
}
}
} () );
return text;
}
用法:
getText( row.cells[0] );
如果你不关心差异(innerText
和textContent
不返回相同的输出,更不用说它得到了哪些元素,还有textNodes差异)并且只想要一个快速解决方案,使用此:
function getText( el ) {
if ( 'textContent' in el ) return el.textContent;
else return el.innerText;
}