我一直在寻找这个问题的答案,但我找不到任何答案,所以我想我会尝试StackOverflow。
在javascript中,这是否有效:
x = document.getElementById('myId');
y = x.getElementById('mySecondId');
我知道可以使用getElementsByTagName
完成此操作,但我不确定getElementById
返回的对象是否能够使用getElementById
方法。
我知道每个文档的ID应该是唯一的,但有时情况并非如此。
谢谢!
答案 0 :(得分:8)
不。
......但你可以,但是:
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;
}
答案 1 :(得分:2)
嗯,最好的方法是尝试一下。在这种情况下,它不起作用,因为getElementById
方法仅适用于DOMDocument
个对象(例如document
变量)而不适用于DOMElement
个对象,个别节点。我认为它应该也适用于那些人,但是,嘿,我不同意DOM API的大部分设计......
答案 2 :(得分:1)
在问题示例中,您可以只使用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.getElementById
的一个优点是,即使元素尚未在DOM中(例如在创建元素之后),element.querySelector
仍在工作与document.createElement
。
答案 3 :(得分:0)
不。
默认情况下,只有document
对象的方法为getElementById
。
即使x
是iframe或其他内容,您仍需要在访问其他getElementById
之前访问其他一些属性或其他内容。
答案 4 :(得分:0)
当有多个
时,请考虑不使用id也许类或自定义属性更好,然后您可以使用document.querySelectorAll
来填充它们。
els = document.querySelectorAll('[custom-attr]')
答案 5 :(得分:0)
这是基于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');