• ベストアンサー

クリックされた行を取得したい

次の処理を行いたいのですが,どのようにすればいいのでしょうか。 1.document がクリックされたときに,どの要素がクリックされたかを調べる。 2.その要素がid="tbody1"のtbodyタグ内にある場合,次の操作を行う。 3.変数trにクリックされたテーブルの行を指定する。 4.変数tdContentに先程のtr内の第一列目のセルの内容を代入する。 trタグはJavaScriptで自動生成しているので,できれば上の手順でid属性を追加せずに済むようにしたいです, 極力処理を省いたつもりなので,よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

(1) window.onload=function(){ document.body.onclick=function(e){ if(!e){ e=event; e.target=event.srcElement; } alert(e.target.tagName);//クリックされた要素 }; }; (2) td=e.target // クリックされた要素 if(td.parentNode.parentNode.id == "tbody1"){ //tbody 内にある (3) tr=td.parentNode; //クリックされた行 (4) tdContent = tr.cells[0].innerHTML;

KanjiTalk
質問者

お礼

次のようにした結果うまくいきました。本当にありがとうございます。 window.onload = function(e) { document.body.onclick = function(e) { e = event; if ("" != e) { e.target = event.srcElement; }; td = e.target if (td.parentNode.parentNode.id == "tbody1") { tr = td.parentNode; tr.style.backgroundColor = "black"; tr.style.color = "white"; tdContent = tr.cells[0].innerHTML; } } };

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

老婆心ながら >e = event; といきなり代入しちゃったら意味がないので、 調べてから代入するようにした方がいいですよ。

KanjiTalk
質問者

お礼

window.onloaad の外で e を宣言するようにしました。ありがとうございます。

関連するQ&A

  • 全行の bgColor 属性を削除したい

    id="tbody1" の tbody 内にある全ての tr 要素の bgColor 属性を削除したいのですが,やり方がよく分かりません。 どうすればいいのでしょうか。 よろしくお願いします。

  • テーブルのセルのクリック時、セル内の文字を太くするには

    テーブルのセルをクリックした際に、セルの中に入っている文字を太字にする方法が分からず困っています。 ちょっと複雑なテーブル構造になっているのですが、具体的には、以下のような仕様で作成しています。 div要素上でクリックしたら、特定のセルの文字(この場合、id='text1'のセル)の文字を太字にしたいのです。 なお、OnClick時の処理は、外部JavaScriptで行います。 <table> <tr> <td> <div id='div1' textid='text1' onclick="ChgText(event,this)"> <table width='100%'> <tr> <td width='10%'>あああ</td> <td id='text1'>いいい</td> </tr> </table> </div> </td> <tr> </table> イベント元であるdiv要素と、処理対象のTDを関係付けるために、div要素内に「textid='text1'」定義し、外部JavaScriptでは、document.getElementByIdで処理対象を特定し、最終的には、文字を太くしたいと考えています。 外部JavaScriptの概要は以下の通りです。 function ChgText(ev,item){ var text_item = null; text_item = item.tdtext_id; var chgText = document.getElementById(text_item ); chgText.style.font-weight = bold; } 上記の内容で実行しても、文字の太さは変わりませんでした。 フォントの指定の仕方がまちがっているのでしょうか? それとも、そもそも、div要素より後に定義されるTDタグのIDをdiv要素自身が認識しないのでしょうか? 根本的な考え方が間違っているかもしれないので、よきアドバイスをいただけるとありがたいです。 よろしくお願いいたします。

  • jQueryで行の移動

    jQueryでテーブルの行を移動させたいのですが、なかなかうまくいきません。 <table id = "table_test"> <tbody id = "test1"> <tr> <th>見出し1</th> <th>見出し2</th> <th><input type="button" id="button1" value="テスト1"></th> </tr> <tr> <td>項目1</td> <td>項目2</td> <td>項目3</td> </tr> </tbody> <tbody id = "test2"> <tr> <th>見出し1</th> <th>見出し2</th> <th><input type="button" id="button2" value="テスト2"></th> </tr> <tr> <td>項目1</td> <td>項目2</td> <td>項目3</td> </tr> </tbody> <tbody id = "test3"> <tr> <th>見出し1</th> <th>見出し2</th> <th><input type="button" id="button3" value="テスト3"></th> </tr> <tr> <td>項目1</td> <td>項目2</td> <td>項目3</td> </tr> </tbody> </table> 処理としては、button1を押下したら、<tbody id = "test1">~</tbody>の内容を<tbody id = "test2">と<tbody id = "test3">の間にくるように移動させたいです。 trの内容を次のtrの次に移動させることは調べてわかったのですが、tbodyで囲まれている部分をごっそり抜き出して、次のtbodyの後に移動させる方法がわかりません。 tbody内にはtrが複数あるため、移動させるというよりは、追加させてから削除するといった感じになるのでしょうか? どなたかご教授お願い致します。

  • テーブル行追加時にJavaScriptのイベントをセットするには?

    JavaScriptを使ってテーブルに行を追加しています。 その時、TRタグの中にJavaScriptのイベントハンドラ(onClickやonMouseOverなど)をセットしたいのですが、方法がわかりません。 TRタグのalignやheightのような属性は、setAttributeを利用して設定できているのですが・・・。 よろしくお願いします。

  • JavaScriptでテーブルの行入れ替え

    Javascriptでtable内の行を上下に移動させたいと思います。 横に↑ボタンと↓ボタンを用意し、クリックした分だけ上下に移動させるのが理想です。 ライブラリはJQueryやその外部ライブラリであれば使用可能ですが、 行内の要素(<TD>タグやその属性等)は別の処理で直接触りたい為、TABLE以下のタグが ライブラリの使用者から隠蔽されるようなライブラリの使用は難しいです。 ご存知の方がいらっしゃいましたらご回答の程、よろしくお願いします。

  • javascriptでtdのサイズを取得するには?

    javascriptで、tableのあるtdタグの高さ(height)を 取得したいのですが、どうやればいいですか? 例: <table><tr> <td id="tdtest">aaaa</td> <td >bbb</td></tr>・・・ とあった場合に、onLoadイベントで document.getElementById("tdtest").heightで やったのですが、エラーではなく空でした。 教えてください、お願いします。

  • クリックされた罫表セルの行番号、列番号を取得するには

    クリックされた罫表セルの行番号、列番号を取得する事は出来るのでしょうか。 例えば 下記Tableの"き"という文字が入ったセルをクリックすると 列番号:2 行番号:3 という番号を取得したいのです。 <table> <thead><tr><th>1</th><th>2</th><th>3</th><th>4</th></tr></thead> <tbody> <tr td>あ</td><td>い</td><td>う</td><td>え</td></tr> <tr><td>お</td><td>か</td><td>き</td><td>く</td></tr> <tr><td>け</td><td>こ</td><td>さ</td><td>し</td></tr> <tr><td>す</td><td>せ</td><td>そ</td><td>な</td></tr> </tbody> </table> onclickでidのついた所をクリックした時のアクションは取得できましたが、Csvなどからデータを取得したtableのセルをクリックした時の 列数、行数を取得する事は可能でしょうか。 宜しくお願いします。

  • HTMLのテーブルの行数が多くなると処理速度が遅くなります

    テーブルに7,000件ほどのデータを表示します。 行をクリックしたら、行の背景色とフォントカラーを変更させて、 選択状態風にみせるために、JavaScriptを作成しました。 動作はするのですが、クリックしてから色が変更されるまでに7、8秒かかってしまいます。 テーブルの行数が多い場合は仕方ないのでしょうか? 処理速度を改善するためにはどうすればいいのか教えてください。 よろしくお願いします。 1件目のデータをあらわすHTMLはこうなります。1件のデータを2段(2行)にわけています。 <TBODY name=tb1 id=tb1 ・・・ OnClick="rowClick(1);">    <TR rowspan=2>    ・・・<データ内容1/2>・・・    </TR>    <TR>    ・・・<データ内容2/2>・・・    </TR> </TBODY> 7,000件目だとOnClick="rowClick(7000);"となります。 <SCRIPT language="JavaScript"><!--    var selindex=0;    function rowClick(index){       if(selindex==index)return;       //色を変更       document.all.tb1[index-1].className="selcolor";       //前回クリックした行       if(selindex!=0){          //色を元に戻す          document.all.tb1[selindex-1].className="rowcolor_white";       }       //クリックした行を記憶       selindex=index;    } //--></SCRIPT>

  • クリックでclass属性を変更するjavascriptはどう書けば良い

    クリックでclass属性を変更するjavascriptはどう書けば良いか教えて下さい。 クリックで要素が開閉するスクリプトのシンプルなものを探しています。 (開状態でクリック→要素を閉じる。閉状態でクリック→要素を開く) html内にonclickを書かないやり方でお願いします。 クリックする箇所はボタンではなく、aタグのリンクエリアです。 よろしくお願いします。

  • JQueryでクリックされた文字を取得したい

    テーブルがあり、連番が 1 2 3 と振ってあります。 その文字情報をJQueryで取得するにはどのように記述すれば良いのでしょうか? 例)1をクリック → 1 を取得。 <table border="1" width="150"> <tbody> <tr> <td width="50"><a href="#">1</a></td> <td>田中</td> </tr> <tr> <td><a href="#">2</a></td> <td>佐藤</td> </tr> <tr> <td><a href="#">3</a></td> <td>鈴木</td> </tr> </tbody> </table> ご存知の方教えて下さい。

専門家に質問してみよう