链接 getElementById

IT技术 javascript getelementbyid
2021-02-24 21:06:52

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

在javascript中,这是否有效:

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

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

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

谢谢!

6个回答

不。

......但是你可以:

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/

请不要这样做。这是不必要的,因为您可以简单地编写document.getElementById()而不是扩展 Element 原型,因此它只会使您的代码库复杂化并使将继承该项目的开发人员混淆。零收益。
2021-04-15 21:06:52
不要扩展您不拥有的对象。stackoverflow.com/questions/14034180/...
2021-05-15 21:06:52

那么,找出答案的最好方法就是尝试一下。在这种情况下,它将不起作用,因为该getElementById方法仅适用于DOMDocument对象(例如document变量)而不适用于DOMElement作为单个节点的对象。我认为它也应该在那些上可用,但是嘿,我不同意 DOM API 的大部分设计......

您可以在问题示例中使用y = x.querySelector('#'+'mySecondId');而不是y = x.getElementById('mySecondId');

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

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

使用一个优点element.querySelector,而不是document.getElementById里面Element.prototype.getElementByIdelement.querySelector正在即使元素是不是已经在DOM,如与创建之后document.createElement

不。

默认情况下,只有document对象具有该方法getElementById

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

有多个时考虑不使用id

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

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