getElementById在节点上不起作用

时间:2010-10-10 23:38:13

标签: javascript dom dhtml

在这个简单的脚本中,我得到错误“obj.parentNode.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>

3 个答案:

答案 0 :(得分:6)

.getElementById()document上,就像这样:

document.getElementById("2");

由于ID 应该是唯一的,因此不需要通过ID相对于任何其他元素(在这种情况下,在该父元素内)查找元素的方法。此外,如果使用HTML4,则它们不应以数字开头,HTML5中的数字ID 有效。

答案 1 :(得分:3)

用.querySelector('#'+ id)替换.getElementById(id);

答案 2 :(得分:1)

如果节点是动态创建的,并且尚未附加到主文档dom中,则

document.getElementById()将不起作用。

例如,对于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;
    }
}