链接getElementById

| 我一直在寻找这个问题的答案,但找不到任何答案,因此我想尝试使用StackOverflow。 在javascript中,这是否有效:
x = document.getElementById(\'myId\');
y = x.getElementById(\'mySecondId\');
我知道可以使用
getElementsByTagName
完成此操作,但是我不确定
getElementById
返回的对象是否可以使用
getElementById
方法。 我知道ID在每个文档中应该是唯一的,但有时情况并非如此。 谢谢!     
已邀请:
不。 ...但是您可以:
Element.prototype.getElementById = function(id) {
    return document.getElementById(id);
}
在此页面上尝试:
var x = document.getElementById(\'footer\').getElementById(\'copyright\');
编辑:正如Pumbaa80指出的,您还需要其他东西。好吧,这是。请谨慎使用。
Element.prototype.getElementById = function(req) {
    var elem = this, children = elem.childNodes, i, len, id;

    for (i = 0, len = children.length; i < len; i++) {
        elem = children[i];

        //we only want real elements
        if (elem.nodeType !== 1 )
            continue;

        id = elem.id || elem.getAttribute(\'id\');

        if (id === req) {
            return elem;
        }
        //recursion ftw
        //find the correct element (or nothing) within the child node
        id = elem.getElementById(req);

        if (id)
            return id;
    }
    //no match found, return null
    return null;
}
范例:http://jsfiddle.net/3xTcX/     
好吧,找出答案的最佳方法就是尝试一下。在这种情况下,它是行不通的,因为
getElementById
方法仅适用于
DOMDocument
个对象(例如
document
变量),而不适用于作为单个节点的
DOMElement
个对象。我认为它应该也可以在这些版本上使用,但是,我不同意大多数DOM API的设计...     
您可以在问题的示例中使用
y = x.querySelector(\'#\'+\'mySecondId\');
代替
y = x.getElementById(\'mySecondId\');
Element.getElementById
不存在,但是您可以按照其他答案中的说明进行添加,即使不建议在answers14ѭ中添加方法。如果您要绝对使用这种解决方案,则可能出现以下情况:
Element.prototype.getElementById = function(id) {
return this.querySelector(\"#\"+id);
}
Element.prototype.getElementById
中使用
element.querySelector
代替
document.getElementById
的一个好处是,即使元素不在DOM中,例如在用
document.createElement
创建元素之后,
element.querySelector
仍在工作。     
不。 默认情况下,只有
document
对象具有方法
getElementById
。 即使
x
是iframe之类的东西,您仍然必须访问其他属性或其他内容,然后才能获取另一个
getElementById
。     
当有多个时,请考虑不使用id 也许类或自定义属性更好,然后可以使用use25ѭ对其进行查找。
els = document.querySelectorAll(\'[custom-attr]\')
    
这是基于Node.contains的快速替代方案
var getById = function(id, context) {
  var el = document.getElementById(id);
  return context.contains(el) ? el : null;
}

var container = document.getElementById(\'container-element\');
getById(\'my-element-id\', container);
最后一行(配置在最新的Chrome和Firefox上)比jQuery \的性能快4到10倍
$(\'#my-element-id\', container);
唯一的好选择是
querySelector
(快一点)
container.querySelector(\'#my-element-id\');
    

要回复问题请先登录注册