Javascript 链接getElementById

Javascript 链接getElementById,javascript,getelementbyid,Javascript,Getelementbyid,我一直在寻找这个问题的答案,但我找不到答案,所以我想试试StackOverflow 在javascript中,这是否有效: x=document.getElementById('myId'); y=x.getElementById('mySecondId') 我知道这可以通过getElementsByTagName完成,但我不确定getElementById返回的对象是否能够使用getElementById方法 我知道每个文档的ID应该是唯一的,但有时情况并非如此 谢谢 没有 默认情况下,只有文

我一直在寻找这个问题的答案,但我找不到答案,所以我想试试StackOverflow

在javascript中,这是否有效:

x=document.getElementById('myId');
y=x.getElementById('mySecondId')

我知道这可以通过
getElementsByTagName
完成,但我不确定
getElementById
返回的对象是否能够使用
getElementById
方法

我知道每个文档的ID应该是唯一的,但有时情况并非如此

谢谢

没有

默认情况下,只有
文档
对象具有方法
getElementById


即使
x
是一个iframe或其他东西,在访问另一个
getElementById

之前,您仍然需要访问一些其他属性或其他任何东西。好吧,最好的方法是尝试一下。在这种情况下,它将不起作用,因为
getElementById
方法仅在
DOMDocument
对象(例如
document
变量)上可用,而在
DOMElement
对象上不可用,这些对象是单独的节点。我认为它应该也可以在这些平台上使用,但是嘿,我不同意DOM API的大多数设计…

…但是你可以:

Element.prototype.getElementById = function(id) {
    return document.getElementById(id);
}
请在此页面上尝试:

var x = document.getElementById('footer').getElementById('copyright');
编辑:正如彭彭80所指出的,你想要别的东西。好的,给你。小心使用

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;
}
Element.prototype.getElementById=函数(req){
var elem=this,children=elem.childNodes,i,len,id;
for(i=0,len=children.length;i

例如:

当有多个id时,考虑不使用id

也许类或自定义属性更好,然后可以使用
document.querySelectorAll
来定义它们

els = document.querySelectorAll('[custom-attr]')

这是一个基于

var getById=函数(id,上下文){
var el=document.getElementById(id);
返回context.contains(el)?el:null;
}
var container=document.getElementById('container-element');
getById('my-element-id',容器);
最后一行(在最新的Chrome和Firefox上分析)的执行速度比jQuery的同类产品快4到10倍

$(“#我的元素id”,容器);
唯一好的选择是
querySelector
(稍微快一点)

container.querySelector(“#我的元素id”);

您只需使用
y=x.querySelector('#'+'myseconded')
而不是
y=x.getElementById('mySecondId')

Element.getElementById
不存在,但您可以按照其他答案中的说明添加它,即使不建议向
元素添加方法。如果您想绝对使用这种解决方案,以下是一种可能性:

Element.prototype.getElementById = function(id) {
return this.querySelector("#"+id);
}

使用
元素.querySelector
而不是
文档.getElementById
元素.prototype.getElementById
中的一个优点是
元素.querySelector
即使元素不在DOM中也能工作,例如在使用
文档.createElement
创建它之后。或者(它扩展了
domeElement
对象以支持
getElementById
方法)。请不要这样做。这是不必要的,因为您可以简单地编写
document.getElementById()
而不是扩展元素原型,因此它只会使您的代码库复杂化,并使将继承项目的开发人员感到困惑。零收益。不要扩展您不拥有的对象。