
こんにちは。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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
指定した要素を含んだテキスト...
-
プルダウンで選択すると、DBの...
-
javascript についてご教示くだ...
-
CSVデータをツリー表示させたい
-
特定<table>内の<td>の色を変える
-
JavaScriptの読み込み順
-
一覧から選択した行の行番号を...
-
ビンゴゲームの作成
-
ブルダウン選択でページの表示...
-
テーブル列の表示・非表示機能...
-
ハイパーリンクを別ウインドウ...
-
Excelで作ったhtmlファイルのサ...
-
jquery・特定要素の選択について
-
まとめてセルの色を変えたい
-
jqueryでどうやってエスケープ?
-
tableの任意行にfocusをあてる
-
HTML中のTABLEのデータを抽出す...
-
return trueとreturn falseの用...
-
HTMLの表示内容にfor文を使...
-
Selectボックスの幅を自動で広...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
ハイパーリンクを別ウインドウ...
-
プルダウンで選択すると、DBの...
-
JavaScriptで特定のtdタグにcla...
-
至急!GetElementById でtdの...
-
一覧から選択した行の行番号を...
-
クリックされた罫表セルの行番...
-
tableの任意行にfocusをあてる
-
javascript クリックすると、あ...
-
チェックボックスにチェックが...
-
マウスをブラウザの外に出した...
-
ブルダウン選択でページの表示...
-
Excelで作ったhtmlファイルのサ...
-
スクロールバーの表示位置を変...
-
動的なtableの値を取得したい
-
ツールチップにテーブル左端列...
-
【UWSC】HTML内のある部分を抽...
-
別ページからOnclickでテーブル...
-
【JQuery】テーブルで行選択さ...
-
JSで、テーブルのある行のみ、...
おすすめ情報