私はクリックハンドラをテーブル要素の1つに追加しています。私はinspectでそれを確認しました - >これは私が必要とする値、アドレス値を返すことです。私のChildNodesがJSイベントハンドラで未定義に戻ったのはなぜですか?
document.getElementById('donut-attributes').parentNode.childNodes[10].childNodes[1].childNodes[30].innerText
//returns 123 Some Address on console log
これは、メインページ上で完全なスクリプトです:
<script>
window.onload = function(){
var donutContainer = document.getElementById("donut-attributes");
donutContainer.addEventListener('click', function(e){
alert(e.target.parentNode);
address = e.target.parentNode.childNodes[10].childNodes[1].childNodes[30].innerText;
alert("donut container after");
});
}
</script>
私は必ずすべての作品を作るために、いくつかのalert()
を設定します。 alert(e.target.parentNode)
になると、[object HTMLTableRowElement]
と表示されます。ただし、alert(e.target.parentNode.childNodes[10]);
になると、undefined
が返されます。
どのようにしてクリックハンドラを修正すれば、テーブル要素をクリックすると、アドレス値がaddress
に格納されるのですか?なぜ私はコンソールのログにアドレスを表示し、clickhandlerで使用したときにundefined
と表示されますか?
EDIT:テーブルのHTML (index.html.erb)
は、次のようになります。
<table border=1 class="table table-condensed donut-attributes">
<tbody class="table-hover">
<tr>
<td rowspan=5>
Some_image
</td>
<tr>
<td class="center" style="vertical-align: middle">Some_name</td>
</tr>
<tr>
<td class="center" style="vertical-align: middle">Some_phone</td>
</tr>
<tr>
<td class="center" style="vertical-align: middle">Some_rating</td>
</tr>
<tr>
<td class="center" style="vertical-align: middle" id="address" >Some_address</td>
</tr>
<tr>
<td rowspan=5>
Some_image2
</td>
<tr>
<td class="center" style="vertical-align: middle">Some_name2</td>
</tr>
<tr>
<td class="center" style="vertical-align: middle">Some_phone2</td>
</tr>
<tr>
<td class="center" style="vertical-align: middle">Some_rating2</td>
</tr>
<tr>
<td class="center" style="vertical-align: middle" id="address" >Some_address2</td>
</tr>
</tr>
</tbody>
はどのようにして、テーブルの行の任意の要素の上にカーソルを置く、それをクリックして、対応するアドレスを取得することができますか? (私は置いて、二行をクリックした場合、すなわち、2行目のどのの列に、私はそれがsome_address2を返却する必要があります)
、今ではない、まさにOPので更新
'childNodes'には、空白文字のテキストノードと、カウント中の要素間のコメントノードが含まれます。 '.children'を使用して – zer00ne
e.targetとは対照的に、e.currentTargetが必要になるでしょう。それを言って、確かにあなたが望む要素を得る良い方法がある – aw04
あなたは 'address'をテーブルで言うと、戦艦ゲームのような意味ですか?例。列3行8? – zer00ne