2016-07-01 3 views
-1

それぞれが(明らかに)一意のIDを持つ一連のHTMLテーブルを生成するプログラムを作成しています。各表のセルの中には、onClickハンドラがあります(また、それぞれには固有のIDがあります)。私はonClickを呼び出す関数のパラメータとしてそれを使用するために、セルをクリックしてテーブルIDを取得できるようにしたい。tdをクリックしてテーブルIDを取得してください:Pure JavaScript

この質問は、特にJQuery用に以前に(そしてanswered)質問されましたが、純粋なJavaScriptで行うことをお勧めします。私はそれが可能でなければならないと思いますが、どうですか?

+0

。なぜ評価されるのかを説明するコメント。 – David

+0

'this.id'には、イベントハンドラがバインドされている要素のIDが含まれています。それは簡単です。 –

+0

テーブルを生成しているので、なぜ同時にテーブルidをonclickハンドラに入れることができませんか? – JJJ

答えて

5

次のことを試してください:

私は、これはすぐにダウン票2を集めている参照

var tds = document.getElementsByTagName("td"); 
 

 
var getParentTableID = function() { 
 
    var el = this; 
 
    while ((el = el.parentElement) && el.nodeName.toUpperCase() !== 'TABLE'); 
 
    console.log(el.id);//Table id 
 
}; 
 

 
for(var i = 0; i < tds.length; i++) { 
 
    tds[i].onclick = getParentTableID; 
 
};
<h4>Table1</h4> 
 
<table id="tableID_1"> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>2</td> 
 
    <td>3</td> 
 
    </tr> 
 
    <tr> 
 
    <td>4</td> 
 
    <td>5</td> 
 
    <td id="b3">6</td> 
 
    </tr> 
 
    <tr> 
 
    <td>7</td> 
 
    <td>8</td> 
 
    <td>9</td> 
 
    </tr> 
 
</table> 
 
<h4>Table2</h4> 
 
<table id="tableID_2"> 
 
    <tr> 
 
    <td>1</td> 
 
    <td>2</td> 
 
    <td>3</td> 
 
    </tr> 
 
    <tr> 
 
    <td>4</td> 
 
    <td>5</td> 
 
    <td id="b3">6</td> 
 
    </tr> 
 
    <tr> 
 
    <td>7</td> 
 
    <td>8</td> 
 
    <td>9</td> 
 
    </tr> 
 
</table>

+1

'for-in'の代わりに' for'ループを使用してください。今では、そのループ内のいくつかの非要素にぶつかります。あなたが提供したコードに無害ですが、まだ完全にはありません。 –

+0

...各要素に対して新しい関数を作成する代わりに、その関数を再利用することができます。大したことではなく、ちょっとしたIMO。 –

+1

'.toUpperCase()'はHTMLでは害がなく、XHTMLでは必要です。 – Oriol

0

はそれを試してみてください。

<table id="Test"> 
    <tr> 
    <td onclick="test(this)">teste</td> 
    <td>teste</td> 
    </tr> 
</table> 

<table id="Test2"> 
    <tr> 
    <td onclick="test(this)">teste</td> 
    <td>teste</td> 
    </tr> 
</table> 

<script> 
function test(obj) { 

    while(obj.tagName.toUpperCase() !== "TABLE") { 
    obj = obj.parentNode; 
    } 

    console.log(obj.id); 

} 

</script> 
+0

XHTMLではパーサは魔法のように 'tbody'を挿入しません – Oriol

+0

私は投稿を編集しました。今すぐチェックしてください。 – msantos

関連する問題