我想创建包含父元素的链,并通过使用相应的符号(。和#)返回顶级父级(类或id)的任何属性。我试过但跑到无限循环
html结构: -
<div id="main">
<p>Hello Alisha..</p>
<div class="container">
<div id="toplayer">
</div>
<div class="mid_layer">
<ul>
<li>javascript</li>
<li id="target">qbasic</li>
</ul>
</div>
</div>
</div>
我的js代码: -
var t = document.getElementById("target");
function chain(el) {
var f = {};
var m = el;
if (el !== null && el !== undefined) {
var y = m.parentElement;
while(null !== y){
var r = {};
r['parent'] = y;
f[m.tagName] = r;
var m = y;
}
return f;
}
}
chain(t);
循环dos不会停在上面的程序中。
答案 0 :(得分:1)
如果您只需要获取顶级父元素属性,则无需创建任何链。有内置的属性可以收集这些数据:
var t = document.getElementById("target");
console.log(t.offsetParent.children[0].id)
您可以在Chromes控制台中轻松查看可用的方法或属性:
var t = document.getElementById("target");
dir(t)
答案 1 :(得分:1)
在循环中移动y
的赋值(如DrC所评论的那样),因为它现在y
总是not null
,因此是无限循环。
var t = document.getElementById("target");
function chain(el) {
var f = {};
var m = el;
if (el !== null && el !== undefined) {
var y = m.parentElement;
while(null !== y){
y = m.parentElement;
var r = {};
r['parent'] = y;
f[m.tagName] = r;
var m = y;
}
return f;
}
}
chain(t);