2011-01-11 74 views
2

我有一個看起來像下面的結構,我試圖得到id foo。這是只有DIV與ID如果我們從onclickfunc()冒泡,這意味着不會是其他DIVs其中包含foo內的id。但是,foo中可能包含一個包含id的其他標籤(例如bye, hello)。javascript獲取外部父ID DIV

沒有框架被使用。

<div id="bar"></div> 
<div id="foo"> 
    <p><p> 
    <div class="bye"> 
     <input id="bye" type="text" value="test" /> 
     <input id="hello" type="text" value="test" /> 
     <table> 
      <tr><td onclick="func(event)">1</td></tr> 
      <tr><td onclick="func(event)">2</td></tr> 
     </table> 
    </div> 
</div> 
+3

你的問題到底是什麼? –

+1

當我點擊一個表格單元格時試圖獲得id'FOO'。 – Mike

+1

引用:我試圖讓id foo。這就是問題所在。 – Steve

回答

3

這應該做它的元素:

<div id="bar"></div> 
<div id="foo"> 
    <p><p> 
    <div class="bye"> 
     <input id="bye" type="text" value="test" /> 
     <input id="hello" type="text" value="test" /> 
     <table> 
      <tr><td onclick="func(this)">1</td></tr> 
      <tr><td onclick="func(this)">2</td></tr> 
     </table> 
    </div> 
</div> 

<script type="text/javascript"> 
    function func(elt) { 
      // Traverse up until root hit or DIV with ID found 
     while (elt && (elt.tagName != "DIV" || !elt.id)) 
      elt = elt.parentNode; 
     if (elt) // Check we found a DIV with an ID 
      alert(elt.id); 
    } 
</script> 
8
function findIdOfParent(obj) { 
    var o = obj; 
    while(!o.id) { 
    o = o.parentNode; 
    } 

    alert(o.id); // 'foo' 
} 

函數findIdOfParent取DOM節點。你可以用onclick="findIdOfParent(this);"來調用它,但是如果你只想通過event,就像在你的例子中那樣,你必須從event.target或者你現在正在做的任何事情中提取DOM節點。

+0

這必須是正確的答案,而不是沒有任何解釋的接受答案 –

1

您可以使用clicked元素的parentNode屬性遍歷DOM樹。

即:

<td onclick="func(this)"> 
function func(item) 
{ 
    var parent = item.parentNode; 
    // and so on, or something similar 
    var divId = div.id; 
} 
1

ELEM是調用函數上點擊

var found = false; 
var myId = ""; 
while (elem &&!found) { 
    if (elem.id){ 
     found = true; 
     myId = elem.id; 
    } 
    elem = elem.parentNode; 
} 
0

要有一個較爲寬泛的版本,我建議這樣做:

function func(event) { 
    var par = findTop(event.target); 
    console.log(par); 
}; 

function findTop(node) { 
    while(node.parentNode && node.parentNode.nodeName !== 'BODY') { 
     node = node.parentNode; 
    } 

    return node; 
} 

示例:http://www.jsfiddle.net/4yUqL/37/

1

難道你不能應用更簡單的模式嗎?相反,在你的細胞中的onclick屬性,附加一個單擊處理程序到您的最外層的div(S),那麼你只需要參考this

document.getElementById("foo").onclick = function(event) { 
    if(e.target.tagName.toLowerCase() == "td") { 
     alert(this.id); 
    } 
}; 

http://jsfiddle.net/fRxYB/

還是我完全失蹤點?