如何获取可能定义或可能未定义的表单元格的Javascript集合

如何获取可能定义或可能未定义的表单元格的Javascript集合,javascript,dom,Javascript,Dom,可能重复: 我试图在不使用jQuery的情况下获取表的tbody单元格的第一行(,即this.tBodies[0]。rows[0]。cells)。如果没有,我不希望造成错误。 下面的方法似乎有效,但有更好的方法吗 var tbody_cells = (this.tBodies && this.tBodies && this.tBodies[0].rows && this.tBodies[0].rows[0]) ? this.tBodi

可能重复:

我试图在不使用jQuery的情况下获取表的tbody单元格的第一行(
,即this.tBodies[0]。rows[0]。cells
)。如果没有,我不希望造成错误。 下面的方法似乎有效,但有更好的方法吗

var tbody_cells = (this.tBodies
  && this.tBodies
  && this.tBodies[0].rows
  && this.tBodies[0].rows[0])
? this.tBodies[0].rows[0].cells
:undefined;
您可以使用:

这对IE7不起作用,但你真的在乎吗

如果您关心并且经常需要做这类事情,我建议您使用实用程序库,即,它使这项工作变得简单,并为您解决了许多兼容性陷阱:

$('tr:first-child td', this);
您可以使用:

这对IE7不起作用,但你真的在乎吗

如果您关心并且经常需要做这类事情,我建议您使用实用程序库,即,它使这项工作变得简单,并为您解决了许多兼容性陷阱:

$('tr:first-child td', this);
使用try-catch块:

var result;
try{
result = this.tBodies[0].rows[0].cells;
}catch(e if e instanceof ReferenceError){
result = undefined;
}
使用try-catch块:

var result;
try{
result = this.tBodies[0].rows[0].cells;
}catch(e if e instanceof ReferenceError){
result = undefined;
}

实际上我不知道桌子是否总是准备好了

<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 : [];
}

函数getTblCells(){
var cells=document.getElementById(“tbl”).children[0]。children[0]。children;
返回子项?子项:[];
}

您也可以给第一行一个id,检查一次该行是否存在(如果您怀疑它是否存在),然后执行“有子项”检查。

事实上,我不知道表是否总是准备就绪

<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 : [];
}

函数getTblCells(){
var cells=document.getElementById(“tbl”).children[0]。children[0]。children;
返回子项?子项:[];
}


您也可以给第一行一个id,检查一次该行是否存在(如果您怀疑其存在),然后执行“有子项”检查。

@NULL我相信这是一个非常不同的问题。OP寻找的是元素,而不是属性,答案确实不同。简单地使用
this.querySelectorAll('tbody:first-child>tr:first-child>td')
?)@下雨了。我在最初的问题中没有具体说明,但是这个.queryselectoral只在IE8及以上版本中使用。即使现在你也要支持IE7吗?)该死不管怎样,从所有这些答案中,我会选择
试试catch
方法。@raina77ow。你会用try-catch方法而不是我的三元运算符方法吗?@NULL我相信这是一个完全不同的问题。OP寻找的是元素,而不是属性,答案确实不同。简单地使用
this.querySelectorAll('tbody:first-child>tr:first-child>td')
?)@下雨了,七天。我在最初的问题中没有具体说明,但是这个.queryselectoral只在IE8及以上版本中使用。即使现在你也要支持IE7吗?)该死不管怎样,从所有这些答案中,我会选择
试试catch
方法。@raina77ow。你会用试捕法而不是我的三元算子法吗?谢谢。从不知道QuerySelector的事。我并不真正关心IE6,但确实关心IE7。虽然OP的表可能有几个
部分,并且只应处理第一个部分。)但是,对于明显更干净的方法,+1。)谢谢你,罗伊。从不知道QuerySelector的事。我并不真正关心IE6,但确实关心IE7。虽然OP的表可能有几个
部分,并且只应处理第一个部分。)但是,对于明显更干净的方法,+1。)你认为这比我原来的方法好吗?@user1032531更干净,因为你不必写重复的代码,不知道更好。你认为这比我原来的方法好吗?@user1032531更干净,因为你不必写重复的代码,不知道更好。