Javascript 链接getElementById
我一直在寻找这个问题的答案,但我找不到答案,所以我想试试StackOverflow 在javascript中,这是否有效:Javascript 链接getElementById,javascript,getelementbyid,Javascript,Getelementbyid,我一直在寻找这个问题的答案,但我找不到答案,所以我想试试StackOverflow 在javascript中,这是否有效: x=document.getElementById('myId'); y=x.getElementById('mySecondId') 我知道这可以通过getElementsByTagName完成,但我不确定getElementById返回的对象是否能够使用getElementById方法 我知道每个文档的ID应该是唯一的,但有时情况并非如此 谢谢 没有 默认情况下,只有文
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()
而不是扩展元素原型,因此它只会使您的代码库复杂化,并使将继承项目的开发人员感到困惑。零收益。不要扩展您不拥有的对象。