2

HTMLテーブルから値を取得するために次のスクリプトを使用します。innerTextを使用する と、IEとChrome Fineで動作します。しかし、FireFoxはエラーを表示します:row.cells [0] .innerText is undefined Source .If I use textContent It 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
               }

            }
        }
4

3 に答える 3

5

利用可能なプロパティを使用する前にテストしてください。

var contentEnabled = document.textContent === null;

後で、どのプロパティを使用するかを決定する必要があります

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の次の点に注意してください。

innerTextとの違い

InternetExplorerが導入されましelement.innerTextた。意図はほとんど同じですが、いくつかの違いがあります。

および要素textContentを含むすべての要素のコンテンツを取得しますが、ほとんど同等のIE固有のプロパティであるは取得しないことに注意してください。 また、スタイルを認識し、非表示の要素のテキストを返しませんが、は返します。CSSのスタイル設定を認識しているように、リフローはトリガーされますが、トリガーされません。<script><style>innerTextinnerTexttextContentinnerTexttextContent

于 2012-06-20T08:48:51.697 に答える
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
               }
                 }
            }
        }
于 2012-06-20T08:46:51.517 に答える
0

クロスブラウザ方式(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] );

違いを気にせず(innerTextそしてtextContent、取得する要素は言うまでもなく、同じ出力を返さない場合は、textNodesの違いもあります)、簡単な解決策が必要な場合は、次を使用してください。

function getText( el ) {
    if ( 'textContent' in el ) return el.textContent;
    else return el.innerText;
}
于 2012-06-20T09:10:31.137 に答える