1

重複の可能性:
JavaScript でのプロパティの存在の確認

i.e. this.tBodies[0].rows[0].cellsjQuery を使用せずに、テーブルの tbody セル ( ) の最初の行を取得しようとしています。何もない場合は、エラーを発生させたくありません。以下はうまくいくようですが、もっと良い方法はありますか?

var tbody_cells = (this.tBodies
  && this.tBodies
  && this.tBodies[0].rows
  && this.tBodies[0].rows[0])
? this.tBodies[0].rows[0].cells
:undefined;
4

3 に答える 3

2

querySelectorAllを使用できます:

this.querySelectorAll('tr:first-child td');

これはIE7では機能しませんが、本当に気になりますか?

この種のことを気にかけ、頻繁に行う必要がある場合は、ユーティリティライブラリ、つまりjQueryを使用することをお勧めします。これにより、これが簡単になり、互換性に関する多くの落とし穴に対処できます。

$('tr:first-child td', this);
于 2012-11-23T14:30:38.880 に答える
2

trycatchブロックを使用します。

var result;
try{
result = this.tBodies[0].rows[0].cells;
}catch(e if e instanceof ReferenceError){
result = undefined;
}
于 2012-11-23T14:31:16.503 に答える
0

実際、テーブルが常に準備ができているかどうかはわかりません。

<html>
<body>
    <table id="tbl">
        <tbody>
            <tr>
                <td>
                </td>
                <td>
                </td>
            </tr>
        </tbody>
    </table>
</body>
</html>

function getTblCells() {

    var cells = document.getElementById("tbl").children[0].children[0].children;

    return children ? children : [];
}

最初の行に id を指定し、その行が存在するかどうか (その存在が疑わしい場合) を一度チェックしてから、「子を持つ」チェックを実行することもできます。

于 2012-11-23T14:35:35.060 に答える