2010-10-10 57 views
3

在這個簡單的腳本中,我收到錯誤「obj.parentNode.getElementById不是函數」,我不知道,什麼是錯的。getElementById無法在節點上工作

<script type="text/javascript"> 

     function dosomething (obj) { 
     sibling=obj.parentNode.getElementById("2"); 
     alert(sibling.getAttribute("attr")); 
     } 

</script> 

<body> 
<div> 
    <a id="1" onclick="dosomething(this)">1</a> 
    <a id="2" attr="some attribute">2</a> 
</div> 
</body> 

回答

5

.getElementById()document,像這樣:

document.getElementById("2"); 

由於ID被應該是獨特,沒有必要爲一種方法,其通過相對ID查找元素的任何其它元件(在這種情況下,在該父母的內部)。此外,如果使用HTML4,則不應以數字開頭,編號爲的數字爲在HTML5中有效。

+0

因此,儘管getElementById經常與其他DOM方法一起描述爲適用於任何節點,但實際上它僅適用於文檔。好,謝謝。 – 2010-10-10 23:54:27

1

document.getElementById()將不起作用,如果該節點是動態創建的,但尚未附加到主文檔dom中。

例如在Ajax中,並非所有節點都連接在任何給定點上。在這種情況下,你要麼需要一個手柄明確追蹤到每一個節點(通常爲最佳性能),或使用類似這樣找對象備份:

function domGet(id , rootNode) { 
    if (!id) return null; 

    if (rootNode === undefined) { 

     // rel to doc base 
     var o = document.getElementById(id); 
     return o; 

    } else { 

     // rel to current node 
     var nodes = []; 
     nodes.push(rootNode); 
     while (nodes && nodes.length > 0) { 
      var children = []; 
      for (var i = 0; i<nodes.length; i++) { 
       var node = nodes[i]; 
       if (node && node['id'] !== undefined) { 
        if (node.id == id) { 
         return node; // found! 
        } 
       } 

       // else keep searching 
       var childNodes = node.childNodes; 
       if (childNodes && childNodes.length > 0) { 
        for (var j = 0 ; j < childNodes.length; j++) { 
         children.push(childNodes[j]); 
        } 
       } 
      } 
      nodes = children; 
     } 

     // nothing found 
     return null; 
    } 
} 
2

更換.getElementById(ID)與.querySelector( '#' + ID);