
はじめまして、こんにちは。
初歩的な質問なので恐縮ですが、、どうしてもわからないのでどなたか教えてください(> <)
テーブルの各行の上をカーソルが通過するとその行の色が変わる(通過しおわると元の色に戻る)というのをプログラムを作りたいのです。。
一行ごとでしたらonMouseOver,onMouseoutを使って
簡単にできますが、カーソルが『りんご』の行の上にあるときは『くだもの』のセルも一緒に色を変える、また『みかん』の行の上のときも『くだもの』のセルも一緒に色を変える・・・というように『バナナ』も『メロン』も同じように色変更させたいのです・・・
説明が下手で大変申し訳ございませんが、どうかよろしくお願い致します。(ジャバスクリプトは勉強を始めたばかり・・・というレベルなのです比較的簡単なソースでお願いします)
ソースは下記になります↓
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<td rowspan="4">くだもの</td>
<td>りんご</td>
<td></td>
<td></td>
</tr>
<tr>
<td>みかん</td>
<td></td>
<td></td>
</tr>
<tr>
<td>バナナ</td>
<td></td>
<td></td>
</tr>
<tr>
<td>メロン</td>
<td></td>
<td></td>
</tr>
<tr>
<td rowspan="2">野菜</td>
<td>なす</td>
<td></td>
<td></td>
</tr>
<tr>
<td>とまと</td>
<td></td>
<td></td>
</tr>
</table>
よろしくお願い致しますm(__)m
No.5ベストアンサー
- 回答日時:
#3です。
見返してみるとバグがあったりで、思い切ってだいぶ変更してみてました。
背景だけでなく、文字色を変えたりいろいろ希望がでてくるとおもいますので
classで調整するといいかもしれないですね。
ちなみにあらたに行を追加するときのやりかたとしては・・・
見出しになるtdにidをふって、それと同じ名前のclassを各行のtrに
ふってやればいけるはず。
<style>
.fruit{
background-Color:blue;
}
.vegetable{
background-Color:green;
}
.cereal{
background-Color:yellow;
}
.onmouse{
background-Color:red;
color:white;
text-decoration:blink;
font-weight:bold;
}
</style>
<script>
window.onload=function(){
var trs=document.getElementsByTagName("tr");
var thisClass="";
var classNames=new Array();
for(var i in trs){
if(trs[i].className) classNames[trs[i].className]=true;
trs[i].onmouseover=function(){
thisClass=this.className;
this.className=this.className+(this.className.indexOf(" onmouse")==-1?" onmouse":"");
document.getElementById(thisClass).className="onmouse";
}
trs[i].onmouseout=function(){
this.className=this.className.replace(" onmouse","");
document.getElementById(thisClass).className="";
}
}
for(var j in classNames){
document.getElementById(j).onmouseover=function(){
for(var i in trs){
if(this.id==trs[i].className){
trs[i].className=trs[i].className+(trs[i].className.indexOf(" onmouse")==-1?" onmouse":"");
}
}
}
document.getElementById(j).onmouseout=function(){
for(var i in trs){
if(trs[i].className)
if(trs[i].className.indexOf(" onmouse")>0){
trs[i].className=trs[i].className.replace(" onmouse","");
}
}
}
}
}
</script>
<table width="300" border="1" cellspacing="0" cellpadding="0">
<tr class="fruit">
<td rowspan="4" id="fruit">くだもの</td>
<td>りんご</td>
<td></td>
<td></td>
</tr>
<tr class="fruit">
<td>みかん</td>
<td></td>
<td></td>
</tr>
<tr class="fruit">
<td>バナナ</td>
<td></td>
<td></td>
</tr>
<tr class="fruit">
<td>メロン</td>
<td></td>
<td></td>
</tr>
<tr class="vegetable">
<td rowspan="2" id="vegetable">野菜</td>
<td>なす</td>
<td></td>
<td></td>
</tr>
<tr class="vegetable">
<td>とまと</td>
<td></td>
<td></td>
</tr>
<tr class="cereal">
<td rowspan="3" id="cereal">穀物</td>
<td>米</td>
<td></td>
<td></td>
</tr>
<tr class="cereal">
<td>小麦</td>
<td></td>
<td></td>
</tr>
<tr class="cereal">
<td>トウモロコシ</td>
<td></td>
<td></td>
</tr>
</table>
再度の丁寧なお返事どうもありがとうございます。
明日までなになんとかしなければならないものなので
早くご返事いただいてとっても嬉しいです!
『見出しになるtdにidをふって、それと同じ名前のclassを各行のtrに
ふってやれば・・・』というのはやってみましたけど、スクリプトのエラーがでてきてできなかったような気が・・・でも再度やってみます!!私のことだからなにか間違ってた可能性大なので・・・(f^^;)
ほんとうにありがとうございましたm(_ _)m
No.4
- 回答日時:
原理だけ
「くだもの」の色を変更するfunctionを作る
function kudamono(color){}
colorにセットされた色に変更する物として作成
overの時にりんごやみかん等を変更すると同時に変更したい色と一緒に作ったfunctionを呼ぶ
out時は基本の色と一緒に呼べば戻る。透過なら"transparent"をセットして機能するようにしておく
http://www.tohoho-web.com/css/reference.htm#back …
No.3
- 回答日時:
classとidでこんな感じでも・・・
<style>
.fruit{
background-Color:blue;
}
.vegetable{
background-Color:green;
}
</style>
<script>
window.onload=function(){
var onmouseColor="red";
var defaultColor="";
var trs=document.getElementsByTagName("tr");
for(i in trs){
trs[i].onmouseover=function(){
this.style.backgroundColor=onmouseColor;
defaultColor=document.getElementById(this.className).style.backgroundColor;
document.getElementById(this.className).style.backgroundColor=onmouseColor;
}
trs[i].onmouseout=function(){
this.style.backgroundColor="";
document.getElementById(this.className).style.backgroundColor=defaultColor;
}
}
group=Array("fruit","vegetable")
for(var j in group){
document.getElementById(group[j]).onmouseover=function(){
for(var i in trs){
if(trs[i].className)
if(this.id==trs[i].className) trs[i].style.backgroundColor=onmouseColor;
}
}
document.getElementById(group[j]).onmouseout=function(){
for(var i in trs){
if(trs[i].className)
if(this.id==trs[i].className) trs[i].style.backgroundColor=defaultColor;
}
}
}
}
</script>
<table width="300" border="1" cellspacing="0" cellpadding="0">
<tr class="fruit">
<td rowspan="4" id="fruit">くだもの</td>
<td>りんご</td>
<td></td>
<td></td>
</tr>
<tr class="fruit">
<td>みかん</td>
<td></td>
<td></td>
</tr>
<tr class="fruit">
<td>バナナ</td>
<td></td>
<td></td>
</tr>
<tr class="fruit">
<td>メロン</td>
<td></td>
<td></td>
</tr>
<tr class="vegetable">
<td rowspan="2" id="vegetable">野菜</td>
<td>なす</td>
<td></td>
<td></td>
</tr>
<tr class="vegetable">
<td>とまと</td>
<td></td>
<td></td>
</tr>
</table>
お返事ありがとうございます。
シンプルなソースでとても参考になりました。
一点質問ですが、このソースの場合、親セルが右に3~5個増えた場合(ここで言う親セルは『くだもの』『野菜』にあたります)どうすればよいのでしょうか??
ちょっといじってみたのですが、、やはりどうにもできませんでした(> <)
ほんとに質問ばかりですみませんが、よろしかったらぜひ教えて下さいm(_ _)m
No.2
- 回答日時:
<html>
<script language="JavaScript" type="text/javascript">
function k_over(elem){
elem.style.backgroundColor = "#ffff00";
var kudamono = document.getElementById("kudamono");
kudamono.style.backgroundColor = "#ffff00";
}
function k_out(elem){
elem.style.backgroundColor = "";
var kudamono = document.getElementById("kudamono");
kudamono.style.backgroundColor = "";
}
function y_over(elem){
elem.style.backgroundColor = "#ffff00";
var yasai = document.getElementById("yasai");
yasai.style.backgroundColor = "#ffff00";
}
function y_out(elem){
elem.style.backgroundColor = "";
var elem = document.getElementById("yasai");
elem.style.backgroundColor = "";
}
</script>
<body>
<table width="300" border="0" cellspacing="0" cellpadding="0">
<tr>
<td id="kudamono" rowspan="4">くだもの</td>
<td onmouseover="k_over(this);" onmouseout="k_out(this);">りんご</td>
<td></td>
<td></td>
</tr>
<tr>
<td onmouseover="k_over(this);" onmouseout="k_out(this);">みかん</td>
<td></td>
<td></td>
</tr>
<tr>
<td onmouseover="k_over(this);" onmouseout="k_out(this);">バナナ</td>
<td></td>
<td></td>
</tr>
<tr>
<td onmouseover="k_over(this);" onmouseout="k_out(this);">メロン</td>
<td></td>
<td></td>
</tr>
<tr>
<td id="yasai" rowspan="2">野菜</td>
<td onmouseover="y_over(this);" onmouseout="y_out(this);">なす</td>
<td></td>
<td></td>
</tr>
<tr>
<td onmouseover="y_over(this);" onmouseout="y_out(this);">とまと</td>
<td></td>
<td></td>
</tr>
</table>
</body>
<html>
-------------------------------
<td onmouseover="y_over(this);" ・・・
等のthisはその要素自身を意味します。ちょっと難しいかもしれませんが、使えると非常に便利なので覚えて損はないと思います。
(要素).style.backgroundColorに値を入れれば背景色が変わります。指定形式はいくつかありますが、ここでは#rrggbb形式で指定しています。(これは大丈夫でしょうか?) 他、"yellow"とかでもOKです。
document.getElementById("要素のID")で要素が取得できます。これでkudamonoやyasaiのセルを取得しています。
ここではkudamonoとyasaiの関数を分けましたが、ちょっと工夫すれば共通関数にすることができると思います。(g_over(this, "kudamono/yasai");として呼べるようにする)
参考になれば幸いです。
お返事ありがとうございます。
説明までして下さったのでとてもわかりやすかったです。
参考になりました!!
本当にありがとうございましたm(_ _)m
No.1
- 回答日時:
サンプルです。
<html>
<head>
<title></title>
<style type="text/css">
.mouseover {
background-color:#666;
color:#fff;
}
</style>
<script type="text/javascript">
function sample1(obj){
// 親(TR)のclassを書き換え
obj.parentNode.className = 'mouseover';
// 親の親(tbody)を得る
var TBOD = obj.parentNode.parentNode;
// tbodyの最初の行・最初のセルのclassを書き換え
TBOD.rows[0].cells[0].className = 'mouseover';
}
function sample2(obj){
obj.parentNode.className = '';
var TBOD = obj.parentNode.parentNode;
TBOD.rows[0].cells[0].className = '';
}
</script>
</head>
<body>
<table width="300" border="0" cellspacing="0" cellpadding="0" id="TBL01">
<tbody>
<tr>
<td rowspan="4">くだもの</td>
<td>りんご</td>
<td></td>
<td></td>
</tr>
<tr>
<td>みかん</td>
<td></td>
<td></td>
</tr>
<tr>
<td>バナナ</td>
<td></td>
<td></td>
</tr>
<tr>
<td>メロン</td>
<td></td>
<td></td>
</tr>
</tbody>
<tbody>
<tr>
<td rowspan="2">野菜</td>
<td>なす</td>
<td></td>
<td></td>
</tr>
<tr>
<td>とまと</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
// 処理対象のtableを得る
var TBL = document.getElementById('TBL01');
// 全行・全セルを処理
for(var i=0;TBL.rows[i];i++){
for(var j=0;TBL.rows[i].cells[j];j++){
// onmouseover,onmouseoutを追加する
TBL.rows[i].cells[j].onmouseover=function(){sample1(this)};
TBL.rows[i].cells[j].onmouseout=function(){sample2(this)};
}
}
</script>
</body>
</html>
お返事ありがとうございます。
サンプルまで載せていただきありがとうございました!
一人では解決できなかったのですごく嬉しいです。
難しそうですが・・・サンプルをみて勉強したいと思います。
本当にありがとうございましたm(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS テーブルタグのセルの幅の一部だけを指定 1 2023/03/12 12:02
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- HTML・CSS 自身のHPにYouTube動画を貼り付けるのが出来なくなり困ってます 1 2022/11/11 10:44
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- 工学 【制御工学】単位ステップ応答の遅れ時間の求め方(令和2年度の機械設計技術者試験(制御工学)の問題) 3 2022/11/02 10:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tableの任意行にfocusをあてる
-
特定<table>内の<td>の色を変える
-
jQuery.eachの使い方について教...
-
img sec = ""の取得に失敗したとき
-
JavaScriptから自ページリンク...
-
jqueryで<tr>の制御
-
マウスをブラウザの外に出した...
-
エラーで悩んでます。。
-
【UWSC】HTML内のある部分を抽...
-
ハイパーリンクを別ウインドウ...
-
セレクトメニューの値の取得
-
HTMLのフォーム名とJavaScript...
-
追加ボタンを押した際に ok ボ...
-
Java Scriptで・・・
-
プルダウンメニューの項目で1つ...
-
JavaScriptで次のような動作を...
-
チェックボックス付きのテーブ...
-
大文字か小文字かを判断する方法
-
Visual Studioのデザインでの非...
-
イベント発生時に入力待ち状態...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
ハイパーリンクを別ウインドウ...
-
プルダウンで選択すると、DBの...
-
JavaScriptで特定のtdタグにcla...
-
至急!GetElementById でtdの...
-
一覧から選択した行の行番号を...
-
クリックされた罫表セルの行番...
-
tableの任意行にfocusをあてる
-
javascript クリックすると、あ...
-
チェックボックスにチェックが...
-
マウスをブラウザの外に出した...
-
ブルダウン選択でページの表示...
-
Excelで作ったhtmlファイルのサ...
-
スクロールバーの表示位置を変...
-
動的なtableの値を取得したい
-
ツールチップにテーブル左端列...
-
【UWSC】HTML内のある部分を抽...
-
別ページからOnclickでテーブル...
-
【JQuery】テーブルで行選択さ...
-
JSで、テーブルのある行のみ、...
おすすめ情報