由于什么原因,我不能通过ID检索元素,一旦爬到他的父元素
For what reason i can't retrieve element by ID once climbed on his parent?
在HTML中我有这样的代码
<body>
<script src="debug.js"></script>
<button id="proof" onclick="debug('result:', this);">proof</button>
</body>
和javascript中的
function debug(msg, e)
{
var log = document.getElementById("debuglog");
if (!log)// If no element with the id "debuglog" exists, create one.
{
log = document.createElement("div"); /
log.id = "debuglog";
log.innerHTML = "<h1>Debug Log</h1>";
document.body.appendChild(log);
}
var pre = document.createElement("pre");
var text = document.createTextNode(msg + e.parentNode.getElementById("proof")); //<--PROBLEM HERE
pre.appendChild(text);
log.appendChild(pre);
}
}
请注意,代码工作,如果进入文本节点我写msg + e.p parentnode ,一旦我添加. getelementbyid("证明"),没有结果检索(我认为脚本在运行阶段出错)。
我想做的是"导航"通过html元素,调用他的父母和他的孩子
getElementById
是document
的原型,而不是文档中每个元素的原型。
因此,如果你想限制getElementById
搜索特定元素的子元素,而不是搜索整个文档(以同样的方式可以使用特定元素作为父元素的getElementsByTagName
),你需要将自己的原型添加到所有元素(但IE不支持HTMLElement上的原型)或编写自己的函数。
查看此页的一些建议,但请记住,一个Id应该始终是唯一的页面内,所以简单地使用document.getElementById
是内置和优化的浏览器仍然会更快。
更新:
下面是我链接到的函数的重写,没有错误和更快的反while循环:
function GetChildById( dNode, id ) {
var i, dResult = null;
if ( dNode.getAttribute('id') === id ) { return dNode; }
i=dNode.childNodes.length;
while ( i-- ) {
if ( dNode.childNodes[i].nodeType === 1 ) {
dResult = GetChildById( dNode.childNodes[i], id );
if ( dResult !== null )
break;
}
}
return dResult;
}
用法:GetChildById( node, 'id' )
演示:jsfiddle
但是像axel。
由于ID必须是页面上唯一的元素,您可以通过使用document.getElementById('YOURID')简单地访问它。它是文档的方法,因此脚本会抛出错误。如果你想实现这样的东西,你必须通过一个自定义函数来实现:
function youShouldNotDoThis( element, id ) {
var hit = null;
if ( element.getAttribute('id') == id ) {
return element;
}
for ( var i = 0, l = element.childNodes.length; i < l; i++ ) {
if ( element.childNodes[i].nodeType == 1 ) {
hit = youShouldNotDoThis( element.childNodes[i], id );
if ( hit != null ) {
break;
}
}
}
return hit;
}
在你的脚本片段中:
var whyEver = youShouldNotDoThis(e.parentNode,'proof');
var text = document.createTextNode(msg + whyEver); //<--NO MORE PROBLEM HERE
同样,您不应该通过属性ID执行此操作,因为ID应该是唯一的,但您可以轻松更改此函数以扫描与ID不同的内容。
相关文章:
- 检索单击的元素的父级
- 只有当Angular从资源对象检索数据时,才选择选项元素
- 如何使用javascript查找从xml中检索到的元素数量
- 用于检索span元素内容的JavaScript
- 如何使用javascript中的for循环成对检索数组元素
- 检索表中元素的背景色
- 如何从给定的json中检索元素
- 使用JQuery检索元素数据
- 如何使用jQuery以与多选框中相同的顺序检索多选框中所有选定和未选定的元素
- jQuery don'当元素被其他元素检索时,它不能正常工作
- 正在检索列表中选定的元素
- 在不知道名称的情况下检索json元素
- 以文本形式检索对象元素中的SVG Dom
- 如何在没有任何元素id的情况下检索表中的文本内容
- 如何在servlet中从动态html表单元素中检索值
- Div在浏览器的检查元素中很暗,无法检索内容
- 从父元素检索数据
- 正在检索元素's的值
- 如何从 DOM 元素检索数据并将其推送到数组中
- jQuery.data()返回'未定义'当从动态元素检索数据时