.parentElement的替代?

时间:2015-01-11 00:16:46

标签: javascript parent-child

我有一个函数,需要通过很多parentElement来获取id。而不是写if( element.parentElement.parentElement.parentElement.id == "target" ){ doThis() }是否有一种方式在javascript中只是说"如果有一个父元素"这个id" doThis()" ?而不是通过所有这些parentElements有一种方法来说明是否有任何元素是具有此ID的当前元素的父元素,那么doThis()?

编辑

许多人说我应该只是getElementById,也许这就是解决方案,但是让我向您展示一下我的代码示例,以便您可以更好地了解我正在做的事情:

我有很多具有相同功能的div。我们称之为clicked()。

所以说我有20个看起来像这样的div:<div onclick = "clicked( this )">Content</div>

让我们说这些div包含在其他几个div中:

<div id = "container">
    <div id = "top">
       <div id = "left">
           <div onclick = "clicked( this )">Content</div>
           <div onclick = "clicked( this )">Content2</div>
           ...
       </div>
    </div>
</div>  

我点击的功能如下:

function clicked( element ){
    if( element.parentElement.parentElement.parentElement.id == 'container' ){ 
        doThis();
    }
}

1 个答案:

答案 0 :(得分:2)

您可以编写一个函数来搜索父层次结构:

function parentWithId(elem, id) {
   while (elem = elem.parentNode && elem !== document.body) {
       if (elem.id === id) {
           return elem;
       }
   }
   return null;
}

var p = parentWithId(element, "target");
if (p) {
    doThis();
}

或者,您甚至可以将整个事情纳入函数

function parentWithId(elem, id, fn) {
   while (elem = elem.parentNode && elem !== document.body) {
       if (elem.id === id) {
           if (fn) {
               fn(elem);
           }
           return elem;
       }
   }
   return null;
}


parentWithId(element, "target", doThis);