2015-01-11 3 views
0

나는 ID를 얻기 위해 parentElement을 많이 통과해야하는 기능이 있습니다. 대신에 if(element.parentElement.parentElement.parentElement.id == "target"){ doThis() } 작성하는 방법은 자바 스크립트에서 "이 id"doThis() "가있는 상위 요소가있는 경우에만 말하는 것입니까? 이 모든 parentElements를 거치지 않고이 ID를 가진 현재 요소의 부모 요소가 있다면 doThis()를 호출하는 방법이 있을까요?.parentElement를 대체 하시겠습니까?

편집

많은 말했다 내가해야 단지 getElementById 어쩌면 그 해결책이지만, 내가 뭘하는지보다 조금 볼 수 있도록 내가 당신에게 내 코드의 예를 보여 드리겠습니다 :

동일한 기능을 가진 div가 많이 있습니다. clicked()라고 부를 수 있습니다.

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

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

내 클릭 기능은 다음과 같습니다

<div onclick = "clicked(this)">Content</div>이 된 div는 몇 가지 다른 div에 포함되어 말할 수 있습니다 :

그래서 나는 다음과 같이 20 명 div의가 있다고

+1

로 전체를 통합 할 수는'ID's는 ** 독특한 **해야합니다. 그래서 당신은'document.getElementById()'를 사용할 수 있습니다. –

+2

부모 요소를 찾을 때까지 'while()'루프를 사용하기 만합니다. 그러나'id'가 유일하기 때문에, 왜 직접 요소를 선택하지 않고 * 다음 *에서 조건부 검사를 수행합니까? –

+0

@PM 77-1 내 ID는 모두 고유합니다. 'document.getElementById'를 사용하고 싶지 않은 이유는 각 id에 대해 코드를 반복하고 싶지 않기 때문입니다. 내가 많이. –

답변

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); 
+0

나는이 대답을 받아들이는 것으로 보인다. 필자는 단지 ".parentElement'를 사용하는 방법을 고수 하겠지만, 필자가 필요로하는 것보다 더 복잡하게 만들고 싶지 않기 때문이다. 이 자바 스크립트 함수에 내장 된 있었으면 좋겠다! –

+0

@ carb0nshel1 네이티브 솔루션이 있더라도 jfriend00과 거의 동일하게 사용됩니다. 자신의 함수에 루프를 아웃소싱하는 것은 확실히 코드의 여러 위치에 루프를 수동으로 작성하는 대신 코드를 작성하는 데있어 오류를 안전하고 판독 할 수있는 방법이므로 코드가 복잡 해지는 이유를 알 수 없습니까? – Wortex17

관련 문제