通过添加父名来制作元素的对象链

时间:2018-01-12 04:11:47

标签: javascript

我想创建包含父元素的链,并通过使用相应的符号(。和#)返回顶级父级(类或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不会停在上面的程序中。

请不要建议我使用jquery

2 个答案:

答案 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);