こんにちは。javaScript超初心者です。
現在、mySQLにクエリを投げた結果を表示するテーブルで、マウスオーバした行の左側の2列の値を、ツールチップでマウスポインタの付近に表示させることができないかと思案しています。
一応、以下のサンプル(実際のデータを単純化したものです)のようなコードを書いてみたのですが、みごとに動きません。自分なりにいろいろなサイトの情報などを調べてみたのですが、なにぶん先日javaScriptの勉強を始めたばかりなもので、どこがどういけないのか見当もつきません(恐らく、全面的に間違っているのだと思います)。
勉強を進めていけば、いずれは自分でわかるようになるのかもしれませんが、とりあえず近日中に実装する必要があるので、どなたかご助言をいただけないでしょうか。
※ツールチップを表示させる方法がわからなかったので、とりあえずalertでの表示を試みています。
<html>
<head>
<title>左列の文字列をツールチップで表示</title>
</head>
<script type="text/javascript">
function tooltip_left(tid) {
var rowid = "row_" + tid;
//IDがtooltip_testのテーブルオブジェクトを取得
var table_ob = document.getElementById("tooltip_test");
//IDがrowidの行(オブジェクト??)を取得
var row_ob = document.getElementById(rowid);
//上記の行が何行目か調べてrow_numに格納
var row_num = table_ob.row_ob.rows
//left_textに該当行の左から1番目、2番目のテキストを格納
left_text = table_ob.rows[row_num].cells[0] + ":" + table_ob.rows[row_num].cells[1];
//ツールチップが良く分からないのでalertで表示してみる
window.alert(left_text);
}
</script>
<body>
<table id="tooltip_test">
<tr>
<th>商品ID</th><th>商品名</th><th>データ1</th><th>データ2</th><th>データ3</th>
</tr>
<tr id="3" onMouseOver="tooltip_left(3)">
<td>3</td><td>テスト</td><td>12:00</td><td>12</td><td>済</td>
</tr>
<tr id="515" onMouseOver="tooltip_left(515)">
<td>515</td><td>サンプル</td><td>12:00</td><td>12</td><td>済</td>
</tr>
<tr id="9" onMouseOver="tooltip_left(9)">
<td>9</td><td>ダミー</td><td>12:00</td><td>12</td><td>済</td>
</tr>
</table>
</body>
</html>
No.1ベストアンサー
- 回答日時:
こんにちは。
全部ソースを追ったわけではないのですが
※idですが数字だけはNGです。
JavaScript内でvar rowid = "row_" + tid;を行うのであればid="row_1"とするべきです。
jQueryを併用するとあまり難しいことを考えずに実装できます。
jQueryを使うことが許されない環境であれば申し訳ございません。
こんな作り方もあるよという参考程度ですが見てみてください。
==== 動作サンプル
http://hppg.moe.hm/okwave/qa/q7359651/
<script type="text/javascript">
$().ready ( function() {
// id=tooltip-test内のtbodyの中のtrに以下の動作を設定
$('#tooltip-test tbody tr').hover (
function(e) {
// hover時の処理
// hoverクラスを対象のtrに追加し背景色を変更(おまけ)
$(this).addClass ( 'hover' );
// 0番目のtdと1番目のtdのhtmlを取得
var txt1 = $(this).find('td:eq(0)').html();
var txt2 = $(this).find('td:eq(1)').html();
// bodyにdiv id=tooltip要素を追加する
$('body').append ( '<div id="tooltip">' + (txt1 + ',' + txt2) + '</div>' );
// ツールチップを表示
tooltip ( e.pageX, e.pageY );
},function() {
// mouseout時の処理
// 対象のtrからhoverクラスを削除
$(this).removeClass ( 'hover' );
// id=tooltip要素を削除
$('#tooltip').remove();
}
).mousemove ( function(e) {
// tr内でマウスが動いたときの処理
// ツールチップを表示(マウスに追従させる)
tooltip ( e.pageX, e.pageY );
});
function tooltip ( x, y ) {
// ツールチップの位置設定
$('#tooltip').css ({
position:'absolute',
top:y-20,
left:x+20
});
}
});
</script>
この回答への補足
ご回答いただいたコードを本番環境に移植し、思ったとおりの機能を実現することができました。
処理の内容も、jQueryの解説サイトなどを参考にして、なんとか理解することができました。
「e」「e.pageX」「e.pageY」の部分だけが、まだよく分かってませんが。。。
たぶん、functionをネストしてるんでしょうね。
いずれにせよ非常に助かりました。
ありがとうございます。
まだわかない部分も、これから良く考えてみます。
早速のご回答ありがとうございます!
動作サンプルのページ拝見させていただきました。
まさに私がやりたかったことが実現されてますね。
(本番データは列数の多いかなりの横長なテーブルなので、スクロールするとどの列を見ているのかわからなくなってしまうのが悩みでした)
まだ、javaScriptもおぼつかないのに、jQueryの書式もとなるとつらいものがありますが、回答のコードをほぼコピペすれば何とかなるかもしれません。
回答いただいたものを、処理の内容も理解しないまま貼り付けるのは邪道のような気もしますが、とりあえず今すぐに必要なので、やってみようかと思います(内容理解は後追いで)。
No.4
- 回答日時:
度々ありがとうございます!
pgaeX, pageYというのはjQueryのプロパティだったんですね。
「e」のほうはfuncitonの引数として宣言した変数ですよね…たぶん。
今後も引き続き、自分でこういうコードが書けるように勉強を続けていこうと思います。
No.3
- 回答日時:
ていせいです。
ごめん。(ぶらんくありすぎ)D を E にふくめるかは、めんどうで・・・
var E = function (r) {
r.title = this.map (D, r.cells).join (' ');
};
A.forEach.call (B.rows, E, C);
No.2
- 回答日時:
こんにちは。
てーぶるがよみこまれたあとで、じっこうしてね。<script type="application/javascript; version=1.6">
var A = Array.prototype;
var B = document.getElementById ('tooltip_test');
var C = [0, 1];
var D = function (c) {
return this[c] ? this[c].textContent || '': '';
};
var E = function (r) {
r.title = C.map (D, r.cells).join (' ');
};
A.forEach.call (B.rows, E);
</script>
ご回答ありがとうございます。
わたしが購入した入門書にも「this」が載ってて、ちょっと気になってました。
まだ、そこまでいってないのですが、どうやらオブジェクト指向なんかと絡んでくるらしいですね。
(.prototypeなんてあたりも)
今日はもう体力的につらいので、明日以降、どういう処理をしているのか読解してみようかと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
td:nth-childを使ってa要素を取...
-
jQueryでクリックされたテーブ...
-
一覧から選択した行の行番号を...
-
テーブルで複数行をまとめて非...
-
jspでのArrayListの値の表示
-
tableの任意行にfocusをあてる
-
二次元配列に数字をランダムに...
-
ツールチップにテーブル左端列...
-
TD内のチェックボックスの位置...
-
マウスをブラウザの外に出した...
-
HTML中のTABLEのデータを抽出す...
-
[javascript]</TDと</TR以外で...
-
特定<table>内の<td>の色を変える
-
JavaScriptで特定のtdタグにcla...
-
Excelで作ったhtmlファイルのサ...
-
ハイパーリンクを別ウインドウ...
-
動的なtableの値を取得したい
-
至急!GetElementById でtdの...
-
return trueとreturn falseの用...
-
hiddenのvalueの値を変えたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
ハイパーリンクを別ウインドウ...
-
tableの任意行にfocusをあてる
-
プルダウンで選択すると、DBの...
-
一覧から選択した行の行番号を...
-
チェックボックスにチェックが...
-
至急!GetElementById でtdの...
-
JavaScriptで特定のtdタグにcla...
-
マウスをブラウザの外に出した...
-
JavaScriptでテーブルをクリッ...
-
JavaScriptでテーブルの行入れ替え
-
Selenium.ChromeDriverの使い方...
-
スクロールバーの表示位置を変...
-
ブルダウン選択でページの表示...
-
【UWSC】HTML内のある部分を抽...
-
テーブルで複数行をまとめて非...
-
jquery datatablesを使用 イン...
-
HTML中のTABLEのデータを抽出す...
-
【JQuery】テーブルで行選択さ...
-
iframeの内のTable(rowspan有り...
おすすめ情報