2011-01-11 14 views
2

私は以下のような構造をしています。私はIDを取得しようとしていますfoo。それだけでDIV idを持つfoo内部IDを含む他のdiv要素がある文句を言わないことを意味しonclickfunc()から、我々はバブルアップし、もしです。ただし、bye, helloなどのIDを含むfoo内の他のタグがあります。javascriptは親のIDを取得する

フレームワークは使用されていません。

<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' 
} 

DOMノードを取るfindIdOfParent機能。 onclick="findIdOfParent(this);"で呼び出すことができますが、例のようにeventだけを渡したい場合は、DOMノードをevent.targetから、または現在実行しているものから抽出する必要があります。

+0

これは正しい答えでなければなりません。 –

1

クリックした要素の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

シンプルなパターンを適用できませんか?私は完全

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

http://jsfiddle.net/fRxYB/

またはAM行方不明:代わりに、あなただけのthisを参照する必要がある、あなたの最も外側のdiv要素(複数可)に、単一のクリックハンドラを添付し、あなたの細胞内のonclickプロパティを持ちますポイント?

関連する問題