jQueryのthisの使い方

このQ&Aのポイント
  • jQueryでのthisの使い方とは何か?初心者の方でもわかりやすく解説します。
  • classの領域をポイントしたら同じclassのCSSをかきかえる方法について、jQueryを使って実現する方法を解説します。
  • ポイントしている要素のみが変わるのではなく、ページ内のすべての同じクラスに結果が反映される方法について詳しく解説します。
回答を見る
  • ベストアンサー

jQueryのthisの使い方

javascript初心者なので根本的に勘違いしていたらすいません。 jQueryを使ってAAというclass領域をポイントしたら同じAAのclassを設定されているすべてのCSSをかきかえる、ということをしたいです。 $(document).ready(function(){ $(".AA").hover( function () { $(this).css('color', '#000000'); }, function(){ $(this).css('color', '#222222'); } ); }); ここまでは書いたのですが、ポイントしているところだけしか変わらないので、ページ内のすべての同じクラスに結果が反映されるようにしたいのですが書き方がそもそも間違ってるんでしょうか…。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

#4です。 内容はほぼ同じですが、こちらのほうが少しだけ良いかも… $(function(){  function change(e){   var node = e.target, cls = node.className;   if(cls = cls.replace(/^\s+|\s+$/g,""))    $("."+cls.replace(/\s+/g,", ."),this).     css("color", e.type=="mouseout"?"#000000":"#ff0000");  }  $("#wrapper").mouseover(change).mouseout(change); });

picicate
質問者

お礼

ご回答大変ありがとうございました。 遅くなり申し訳ございません。 最終的には別の方法用いることになりましたが大変参考になりました。

その他の回答 (4)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.4

#2です。 >hoverした領域のクラスを取得>ifで判定>処理 としたかったのですが書き方がわからなくて; まったく違う意味に理解していました。 さて、クラスが複数設定してある場合はどうするのだろうか? 全部対象としてよいと仮定すれば、こんな感じ? (#wrapper内の要素に適用。全角空白は半角に) ※ #3様がご指摘のように、色が分かりにくいので赤にしてあります。 $(function(){ $("#wrapper").bind({  mouseover:change,  mouseout:change }); function change(e){  var node = e.target, cls = node.className;  if(!cls) return;  cls = "." + cls.replace(/^\s+|\s+$/g,"").replace(/\s+/g,", .");  $(cls,this).css("color", e.type=="mouseout"?"#000000":"#ff0000"); } });

picicate
質問者

お礼

ご回答大変ありがとうございました。 遅くなり申し訳ございません。

回答No.3

うーむ。。目的がイマイチ把握できないですね。 現状のソースを公開してもらえませんか? あと、説明文は、 主語、述語、目的語を省略しなくて結構です。 不自然にクドイくらいの言い回しで問題ありません。 ※あと一点。 #000000と#222222はほぼ同じ色ですが、質問者さんの環境では色の違いを認識できているのでしょうか。(私の環境では見分けがつきません。)

picicate
質問者

お礼

ご回答大変ありがとうございました。 遅くなり申し訳ございません。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

jqueryでは、イベント発生要素がthis値にセットされてhandlerに渡されるようです。 (多分、その方が便利なことが多いと考えられたからでしょう) それなので、ご質問のような動作となっていると思われます。 全部をのcssを一緒に変えたいのであれば、ご提示のコードの  $(this) の部分を $(".AA") に変えてあげれば、そのようになると思います。 (処理の効率化のため、先に$(.AA)を変数に置き換えておくのもありかも)

picicate
質問者

お礼

ご回答大変ありがとうございました。 遅くなり申し訳ございません。

picicate
質問者

補足

$(.AA)を変数に置き換えておくのもありかも >>No.1さんへの補足に書いた通りなのですがこれがわからなくて困っておりました;; hoverした領域のクラスを取得>ifで判定>処理 としたかったのですが書き方がわからなくて; 最初の質問で説明不足でした。すいません。

回答No.1

こういうことでしょうか。 ------------------------------------------------- $(document).ready(function() { var AA = $(".AA"); AA.hover( function() { $.each( AA, function() { $(this).css('color', '#000000'); }); }, function() { $.each( AA, function() { $(this).css('color', '#ff0000'); }); } );// hover }); ------------------------------------------------- 何に使うのか気になりますね。面白い動きなので。皮肉ではなく。

picicate
質問者

お礼

ご回答大変ありがとうございました。 遅くなり申し訳ございません。

picicate
質問者

補足

すいません、根本的に説明がおかしかったようです。 ご回答いただきましたが全く意図と違っておりまして; やりたいのは、例:AA、AB、ACというクラス領域が対象で各クラスはページ内に複数箇所、 どれかに触れた(hover)場合、 文字の色をかえ(.css('color', '#000000');)、 離れたら文字の色を元に戻す(.css('color', '#222222');)、ということです。

関連するQ&A

  • JQUERYについて教えてください。

    JQUERYについて教えてください。 readyがDOMを読み終わってから実行しろという意味は分かったのですが、 あったりなかったりするfunction()はどんな意味なのでしょうか? function(){ $(this).stop().animate({'marginBottom':'60px'},150); },function(){ $(this).stop().animate({'marginBottom':'0px'},120); こちらにあるのですがメソッドに一個必須なのでしょうか? 例 <script type="text/javascript"> $(document).ready(function(){ $('div#goto_top').hover( function(){ $(this).stop().animate({'marginBottom':'60px'},150); },function(){ $(this).stop().animate({'marginBottom':'0px'},120); </script>

  • jqueryでajaxsuccessの内側this

    いつもお世話になっております jqueyで質問なのですが、ajaxの成功したときに起動する successの内側で$(this).val()を呼び出し、CSSにアクセスしたいのですが 期待した動作にはなりません。 期待する動作 それぞれクリックすると「1」「2」「3」と出て背景が赤くなる。 実際の動作 エラー「e.nodeName is undefined」となります。 どなたか、successの内側から$(this)にアクセスする方法をご存知の方いらっしゃいませんでしょうか 他の方法で期待の結果になるようにではなく、successの内側から$(this)にアクセスする方法が知りたいです お忙しい中恐縮ですが、分かる方がいたら嬉しいです <input class="hoge" value="1" /> <input class="hoge" value="2" /> <input class="hoge" value="3" /> <script type="text/javascript"> $(document).ready(function() { $('.hoge').click(function(){ $.ajax({ url: "some.html", cache: false, success: function(){ alert( $(this).val() ); $(this).css('background-color','red'); } }); }); }); </script>

  • jQueryで追加した要素がマウスホバーに反応しない

    jQueryを使って、ボタンを押すと要素を追加しています。 後から追加された要素はマウスホバーなどが有効にならないのですが、 対象方法などあるでしょうか。 下記のようなソースで質問の状態になります。 よろしくお願いします。 <html> <head> <title>test</title> <script type="text/javascript" src="system/jquery-1.3.2.min.js"></script> <script type="text/javascript"> <!-- jQuery(document).ready(function($){ jQuery(".edit").hover( function () { jQuery(this).css("background","yellow"); }, function () { jQuery(this).css("background","none"); } ); jQuery(".insert").click(function () { var html = "<div class='edit'><p>add-text</p></div>"; jQuery("#sortable .edit:first").before(html); }); }); // --> </script> </head> <body> <div><INPUT class="insert" type="button" value=INSERT></DIV> <div id="sortable" style="width:200px;"> <div class="edit"> <p>text1</p> </div> <div class="edit"> <p>text2</p> </div> <div class="edit"> <p>text3</p> </div> </div><!-- id="sortable" --> </body> </html>

  • jQueryで記事を6列表示にしたいのです。

    jQueryで記事を6列表示にしたいのです。 jQueryで6列表示をしたいと思って試行錯誤をしていたのですが、 全くわからずじまいで、どうしたらいいのかと知恵袋に投稿致しました。 各カテゴリごとに表示をするようになっているのですが、 オールだけ全て表示になります。 5つ残して表示させればいいのですが、各カテゴリが 消えてしまうので、どうしてもオールは6行表示させたいと思っています。 どなたか助けていただけませんでしょうか? jQuery ---------------------------------------------- $(document).ready(function() { $('ul#navi a').click(function() { $(this).css('outline','none'); $('ul#navi .all').removeClass('current'); $(this).parent().addClass('current'); var filterVal = $(this).text().toLowerCase().replace(' ','-'); if(filterVal == 'all') { $('ul#portfolio li.hidden').fadeIn('slow').removeClass('hidden'); } else { $('ul#portfolio li').each(function() { if(!$(this).hasClass(filterVal)) { $(this).fadeOut('normal').addClass('hidden'); } else { $(this).fadeIn('slow').removeClass('hidden'); } }); } return false; }); }); HTML ---------------------------------------------- <ul id="navi"> <li class="all"><a href="#">All</a></li> <li><a href="#">CMS</a></li> <li><a href="#">CSS</a></li> <li><a href="#">Javascript</a></li> </ul> <ul id="portfolio"> <li class="cms"><a href="#">Movable Type</a></li> <li class="cms"><a href="#">Movable Type</a></li> <li class="cms"><a href="#">Movable Type</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="javascript"><a href="#">prototype</a></li> <li class="css"><a href="#">CSSビギナー</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="css"><a href="#">CSSテンプレート</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">jQuery</a></li> <li class="javascript"><a href="#">plugin</a></li> </ul>

  • jQuery プルダウンメニュー

    プルダウンメニューの一部で行き詰っています。 メニュー1のサブメニューが開いている状態で、メニュー2をクリックした時 メニュー1のサブメニューが閉じるようにする(その逆パターンも含む)。 サブメニューにカーソルがある時、メニューはhoverさせないようにする。 ▼html----------------------------------------- <ul id="gNav"> <li>メニュー1 <ul> <li><a href="">サブメニュー1-1</a></li> </ul> </li> <li>メニュー2 <ul> <li><a href="">サブメニュー2-1</a></li> <li>サブメニュー2-2 <ul> <li><a href="">サブメニュー2-2-1</a></li> <li><a href="">サブメニュー2-2-2</a></li> <li><a href="">サブメニュー2-2-3</a></li> </ul> </li> </ul> </li> <li><a href="">メニュー3</a></li> </ul> ▼jQuery----------------------------------------- $(function(){ $("#gNav > li").click(function(){ $(this).children("ul").toggle(); }); $("#gNav > li > ul > li").mouseenter(function(){ $(this).children("ul").show(); }).mouseleave(function(){ $(this).children("ul").hide(); }); $("#gNav > li").hover(function(){ $(this).css("background-color","#ff9900"); },function(){ $(this).css("background-color","#ffcc00"); }); $("#gNav > li > ul > li").hover(function(){ $(this).css("background-color","#99cc66"); },function(){ $(this).css("background-color","#669933"); }); $("#gNav > li > ul >li > ul >li").hover(function(){ $(this).css("background-color","#dddddd"); },function(){ $(this).css("background-color","#eeeeee"); }); }); 宜しくお願いします。

  • jQueryのドロップダウンメニューについて

    jQueryを勉強しながらいろいろと実装してみているのですが、わからないことが出てきたので質問させていただきます。 今、ドロップダウンメニューを付けていて、とりあえず形にはなり、動作もしています。 ただ、ナビにカーソルかざしたときにペロンっと出てくるのはいいのですが、何度もカーソルをかざすと、その後かざした分だけ勝手にペロンペロンしてしまいます。 かざした時だけ現れるようにするには、どうすればいいのでしょうか? 現状のjavascriptの部分は以下のように記述しています。 $(document).ready(function () { $('#nav li').hover( function () { $('ul', this).slideDown(500); }, function () { $('ul', this).slideUp(500); } ); });

  • jqueryについて、$("+dd",this)について教えていただけ

    jqueryについて、$("+dd",this)について教えていただけませんでしょうか 【参考サイト】 http://ascii.jp/elem/000/000/498/498710/index-6.html 上記のページのアコーディオンメニューを作る記述において、 $(function(){ $("dd:not(:first)").css("display","none"); $("dl dt").click(function(){ if($("+dd",this).css("display")=="none"){ $("dd").slideUp("slow"); $("+dd",this).slideDown("slow"); } }); }); の if($("+dd",this).css("display")=="none") の部分の"+dd"に何故、+が付くのでしょうか。 確かに上記の様に記述をすると上手く動作をしますので、正しいのだと 思うのですが、そうなる理由が解らなくて混乱してしまっています。 thisが示す$("dl dt")の下層の要素を指定するための記述ならば、 if($("this dd").css("display")=="none") として、$("dl dt")の下層にあるddという様な指定は出来ないのでしょうか。 まだ、ほとんどjqueryの記述ルールを把握していないので、お恥ずかしいのですが、 何卒、宜しくお願いいたします。

  • jQuery JavaScript

    初めての質問ですがよろしくお願いします。 とあるシステムをphp+jQueryで開発しています。 <div class="item1" id="item1">アイテム名</div> このdviがクリックされた時に、 $(document).ready(function() { $('div[class^="item"]').mouseover(function(ev) { $(this).css('cursor', 'pointer'); }).click(function(ev) { // **この部分** // }); }); クリックイベント内でクリックされたclassNameかid名を取得する (この場合は item1 を文字列として取得したい) にはどうしたらよいのでしょうか?

  • jQueryのアコーディオンがIE6でちゃんと動いてくれない

    jQueryのアコーディオンがIE6でちゃんと動いてくれない Mac osX 10.5.8 dreamweaver cs3 jQueryのアコーディオン機能を使い、2階層のサイドナビゲーションを作っています。しかし、それをIE6で確認すると2階層目だけが開いてくれません。><MacのSafariなどではちゃんと動いています。 【構造】 (例:HTML) <div id="side"> <h3>製品紹介</h3> <div id="tab01"> <h4><img src="tab01.png" width="210" height="35" alt="" /></h4> <ul> <li><a href="#">会社概要</a></li> <li class="inner"><a href="#">製品紹介</a></li> <ul class="down"> <li>A</li> <li>B</li> <li>C</li> <li>D</li> <li>E</li> </ul> <li class="inner"><a href="#">会社沿革</a></li> <li><a href="#">企業理念</a></li> </ul> </div> <div id="tab02"> <h4><img src="images/tab02.png" width="210" height="35" alt="" /></h4> <ul> ーーーーー <同上のような構造> ーーーーー </ul> </div> </div> <!--side end--> (例:jquery(外部js)) $(document).ready(function() { var main = $("#side ul"); main.hide(); $("#side h4").hover(function(){ $(this).css("cursor","pointer"); },function(){ $(this).css("cursor","default"); }); $("#side h4").click(function(){ $(this).next().slideToggle('fast'); }); }); $(document).ready(function() { var main = $("#inner ul"); main.hide(); $("#side li.inner").hover(function(){ $(this).css("cursor","pointer"); },function(){ $(this).css("cursor","default"); }); $("#side li.inner").click(function(){ $(this).next().slideToggle('fast'); }); }); と、このような構造になっております。 h4をクリックするとその中身がスムーズに開閉、li.innerをクリックするとul.down内がスムーズに開閉。という形です。 どうか、ご教授のほうよろしく御願いします。

  • jQueryが使用できません

    現在JavasscriptのjQueryの学習をしているのですが、jQueryがうまくページ上で反映されず、さっそく困っています。 下記コードのようにカラー、フォントを指定しているのですが、反映されません。 方法としてはgoogleからjQueryファイルを読み取って利用しようとしています。 ブラウザはgooglechoromeを使用しています。 <doctype! html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>jQuery</title> <script src="http://code.jquery.com/jquery-1.10.1.min.js"> $(function(){ $("h1").css("background-color", "yellow"); $("strong, em").css({ "font-size": "150%", "font-style": "italic", "color": "blue" }); }); </script> </head> <body> <h1>jQuery</h1> <p><strong>jQury</strong>は便利なJavascriptの<em>ライブラリ</em></p> </body> </html> 解決方法に心当たりのある方、どうかよろしくお願いします。

専門家に質問してみよう