Re: 再度テーブルの背景変更
吉見です。自己フォロー。
Takashi YOSHIMIさんの<bje8ee$hdq$1@nwall2.odn.ne.jp>から
>T. Sugitaさんの<27f2aa3c03e499ebb65db6fdd617ac56@local.news00.iij4u.or.jp>から
>>イベントの一つ上(親)が必ずしもTRでないことから、row が tr 以外
>>のとき、おかしくなっていると思われますので、イベントターゲット
>>から遡って、TR を見つけるのが良さそうです。
>
>これでうまくいきました。イベントハンドラは TR タグの中に書いてあって
>も、その中に TD があれば イベントのノードはTD アンカーがあればアンカー
>の(要はイベントを起こした最下層の)ノードが帰るということで、TRに対し
>て何かの処理をしようと思ったら、イベントで呼ばれた関数内でさかのぼる必
>要があるわけですね。
あとで気づいたのですが、一般的にはこれでは不十分ですね。
というのは、テーブルの中にテーブルがある場合があるわけです。
<table>
<tr onMouseOver="flipbg();"> // 上位の TR:色を変えたい部分
<td>
<table>
<tr> // 下位の TR
<td>
Ant // イベントのノード
</td>
</tr>
</table>
</td>
</tr>
</table>
のような表だと、下位の TR でループが停止しています。
<table>
<tr id="target" onMouseOver="flipbg("target");"> // 対象
<td>
<table>
<tr> // 下位の TR
<td>
Ant // イベントのノード
</td>
</tr>
</table>
</td>
</tr>
</table>
のように id をつけて、関数内でさかのぼるときに id をチェックしながら
さかのぼれば、完璧です。
つまり、
function flipbg()
{
...
while(row.nodeName != "TR") {
if(!(row = row.parentElement))
return;
}
...
}
を
function flipbg(id0)
{
...
while(row.id != id0) {
if(!(row = row.parentElement))
return;
}
...
}
とする具合。
ただ、すごくスマートでないのは、
<tr id="target" onMouseOver="flipbg('target');">
の中でタグ内に同じ文字列を書かなければならないこと。イベントがこのタグ
自身の情報を渡してくれないことに起因しているわけですが、なんとかならな
いものでしょうかねえ。
--
Takashi YOSHIMI mailto:tak-yoshimi@rio.odn.ne.jp
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735