通过Javascript中的元素数组中的id访问HTML元素是行不通的

时间:2012-01-16 08:56:01

标签: javascript dom

我试图通过他们的id从HTML元素数组中访问HTML元素。我使用getElementsByTagName创建了这个数组,我试图像这样访问这些元素:arrayName.getElementById("theId")

基本上这就是我想要实现的:

在由onchange事件触发的Javascript函数中,我收到引发触发器的元素的引用。由于它是一个表结构,我得到了对<td>元素的引用。 现在,我想使用每个元素的id访问<tr>所在的<td>的所有其他元素。

我的代码的一个小副本:

function chngFunction(theTd){
    var thisRow = theTd.parentNode;
    var inputs = thisRow.getElementsByTagName("input");
    alert(inputs[0].value);///////////Currently what I am doing////
    alert(inputs[1].value);///////////Currently what I am doing////
    .
    .
    .
    //////// What I would like ////////
    //// alert(thisRow.getElementById("myId").value);  // or something like that////
    /////////////// OR ///////////////
    //// alert(inputs[].getElementById("myId").value); // or something like that////
    ///////////////////////////////////

这就是我想要的,因为目前如果我对我的jsp进行任何结构更改,我还必须对js进行更改(这可能会留下错误)。因此,使用id来访问单个元素会很棒。

请帮帮我。

3 个答案:

答案 0 :(得分:4)

根据定义,id值为unique throughout the entire document。因此,没有HTMLElement#getElementById仅通过ID从该元素的后代检索元素。相反,有document.getElementById全局查找它们(因为,id值在文档中是全局唯一的)。因此,如果您使用id值:

alert(document.getElementById("myId").value);

答案 1 :(得分:1)

您可以使用querySelector API。

这应该有效:

thisRow.querySelector('#myId');

如果您的元素ID在整个文档中是唯一的(因为应该),您可以document.getElementById

答案 2 :(得分:1)

getElementByIddocument对象的方法,而不是节点,因此您必须以这种方式使用它:document.getElementById('id');

当然,这仅在HTML元素附加到DOM树时才有效。如果它们不是,你应该使用选择器API。就像塞尔吉奥在他的回答中所暗示的那样。