【发布时间】:2012-09-12 02:09:50
【问题描述】:
我需要根据 DOM 中的级别生成元素的值。例如如果我在文档级别有一个点击事件(即监听页面上的任何点击)并且呈现这样的 HTML,它需要遍历 DOM,直到您看到填充的“ID”属性。
<div id="someid">
<div>
<span>
<p>
<a href="javascript:void(0);">
<span>
<strong>Googlie</strong>
</span>
</a>
</p>
</span>
</div>
当我点击“Googlie”时,它应该会生成如下内容: someid__div_span_p_a_span_strong
问题: 我确实有一些代码可以做到这一点,但它有问题。在上面,如果我有两个元素,如下所示。如何为强元素生成独特的价值?我可以在不使用 childNodes 位置的情况下拥有一些东西吗?如果有人更改元素之间的空白,则 childNodes 值会更改。
...<span>
<strong>Googlie</strong> <br/> <strong>Bingie</strong>
...
document.onclick = function(obj) {
var node = obj.target;
var res = [];
var etA = "";
res[0] = false;
while (!res[0]) {
res = GetIdFor(node);
if (!res[0]) {
var end = node.parentNode.childNodes.length;
for (var i = 0; i < end; i++) {
var j = node.parentNode.childNodes[i];
if (j.nodeType === 1 && j === node) {
break;
}
}
etA = "_" + node.tagName + etA;
node = node.parentNode;
}
else {
etA = res[1] + "_" + etA;
}
}
alert(etA);
};
function GetIdFor(elem) {
var res = [];
res[0] = false;
var d = elem.getAttribute("ID");
if (d !== "undefined" && d !== null) {
res[0] = true;
res[1] = d;
}
return res;
}
现在,我知道 jQuery 可以在这里提供帮助,但这不是重点。 :) 想法?除了使用 childNodes 级别来生成此值之外,我没有其他选择吗?
【问题讨论】:
-
你想用那个 id 达到什么目的?
-
@Oriol。我们的想法是获取该 id 并能够进行逆向工程并在某种报告中再次找到以显示单击的位置。谢谢!
-
@Rac123 然后,如果我理解得很好,你会得到元素,设置一个 id,然后使用该 id 来查找具有该 id 的元素(本身)。是不是有点废话?
标签: javascript-events javascript