IE 与 FireFox 中的 Java 脚本错误

Java Script Errors in IE Vs FireFox?

本文关键字:Java 脚本错误 中的 FireFox IE      更新时间:2023-09-26

我使用以下脚本从HTML表中获取值.如果我使用innerText,它将在IE和Chrome Fine上运行.但是FireFox显示错误:row.cells[0].innerText is undefined Source.如果我使用textContent,它将在Chrome和FireFox中正常工作,但IE显示以下错误单元格.0.textContent'为空或不是对象。如何更改此脚本在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
               }
            }
        }
在使用可用的

属性之前进行测试:

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 文档的 textContent

与内部文本的区别

IE浏览器element.innerText推出 .意图几乎相同,但有几个不同之处:

请注意,虽然textContent获取所有元素(包括<script><style>元素)的内容,但大多数等效的特定于 IE 的属性 innerText 不会。 innerText也知道样式,不会返回隐藏元素的文本,而textContent会。 由于innerText知道CSS样式,它将触发重排,而textContent不会。

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
               }
                 }
            }
        }

如果你真的想要一种跨浏览器的方式(IE<9),请使用jQuery。说真的,你会花在这些怪癖上的时间少得多。

根据它的灵感,你可以像它一样做:使用nodeValue,唯一的跨浏览器方式。但是,nodeValue不适用于元素,但它确实适用于textNodes(它适用于哪些元素的完整列表)。

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] );

如果你不关心差异(innerTexttextContent不返回相同的输出,更不用说它得到了哪些元素,还有 textNode 的差异)并且只是想要一个快速的解决方案,请使用这个:

function getText( el ) {
    if ( 'textContent' in el ) return el.textContent;
    else return el.innerText;
}