Jqueryのセレクタ範囲について

このQ&Aのポイント
  • Jqueryのセレクタ範囲について理解する方法
  • input要素を除外してCSSを適用する方法
  • 上位要素まで遡る方法と子要素の検索方法
回答を見る
  • ベストアンサー

Jqueryのセレクタ範囲について

お世話になります。 【Jquery】 $("#aaa").click(function(){ $(this).css("opacity","1"); }); 【HTML】 <div id="aaa"> <p>hogehoge</p> <p>hogehoge</p> <input type="text" name="hoge"> </div> <div id="aaa"> <p>hoge2hoge2</p> <p>hoge2hoge2</p> <input type="text" name="hoge2"> </div> 上記の2つのdivでそれぞれのdiv内をクリックするれば、そのdiv内のみCSSが適用されるのですが、inputをおした時は発火しないようにすることはできますでしょうか? $("#aaa").not(":input") としてみたのですが、$(this)の値が変わるためDIVが変化しなくなりました。 反対に「$(this).css」を「 $("div#aaa").css」にすると2つのDIVに同時に適用されてしまいます。 何か良い方法がありましたらよろしくお願い致します。 ※子要素であれば$(this)の下に「.find('input~)」と加えて行けばいいと思うのですか上に遡るにはどのような方法がよいのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

試した事ないんだけど、反応させたくないINPUTタグに対するセレクターのクリックイベントでバブリングというのを無効にすればいけるかもしれない。 $("#aaa").click(function(){ $(this).css("opacity","1"); }); $("input", $("#aaa")).click(function(){ // バブリングをキャンセルするコードをここに追加 } 余談ながら、可能ならばひとつのHTML中に複数の同じIDを持つエレメントを存在させない方が良いでしょう。

関連するQ&A

  • jQueryで属性連番処理を、複数単位で行いたい

    ・下記のとき、それぞれのdiv単位でname属性を付与したいのですが、どうすれば良いでしょうか? ■現状 <div>  <input type="text">  <input type="text">  <input type="text">  <input type="text"> </div> <div>  <input type="text">  <input type="text">  <input type="text">  <input type="text"> </div> ■希望 <div>  <input type="text" name="hoge1">  <input type="text" name="hoge2">  <input type="text" name="hoge3">  <input type="text" name="hoge4"> </div> <div>  <input type="text" name="hoge1">  <input type="text" name="hoge2">  <input type="text" name="hoge3">  <input type="text" name="hoge4"> </div> ■補足 ・jQuery.each()を使ったら、hoge8まで通しでナンバリングされてしまいました $('div :text').each(function(i){ ※「div」「input」の数は、動的に変化します

  • jquery、javascriptについて

    あるdivエリア内をクリックすると、特定のチェックボックスに チェックが入るということをしています。 (チェックボックスにチェックを入れるとdiv内の色が変わります。) つまり、divとチェックを連動させたいのです。 その部分は下記でできたんですが、 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <script src="js/jquery-1.2.6.min.js" type="text/javascript"></script> <script type="text/javascript"> $(function(){ $("div#first").mouseover(function() { $(this).css("cursor","pointer"); }).click(function(){ $("input.first").attr("checked","checked"); $("div#first").css("background-color","#FF0000"); }); $("input.first").click(function(){ $("div#first").css("background-color","#CCCCCC"); }); }); $(function(){ $("div#second").mouseover(function() { $(this).css("cursor","pointer"); }).click(function(){ $("input.second").attr("checked","checked"); $("div#second").css("background-color","#FF0000"); }); $("input.second").click(function(){ $("div#second").css("background-color","#CCCCCC"); }); }); </script> </head> <body> <div id="first" style="width:20px; height:20px; background-color:#CCCCCC" >1</div> <div id="second" style="width:20px; height:20px; background-color:#CCCCCC">2</div> <input class="first" name="test" type="checkbox" value="" /> <input class="second" name="test" type="checkbox" value="" /> </html> 全部で、その組み合わせを10箇所作りたいのですが、 function?を単純に10個複製すればできますが、 もっと簡単にまとめる方法はないのでしょうか? さらに贅沢をいうと、 <div>と<input>は上記では、first,secondのように、id,class名で あわせてますが、ポジションなどで連動できるともっといいです。 1番目のdivをクリックしたら、inputの一番目にチェックのようなことです。 そんなことができるのでしょうか? 具体的に教えていただけると幸いです。 よろしくお願いいたします。

  • jQueryのアニメーションについて

    jQueryのアニメーションについて聞きたいです。 チェックボックスと連動してボックスが表示されるアニメーションはわかりましたが、表示される際のアニメーションはどうすればいいかわかりません。 フロートで横並びになった一番・二番・三番の三つのボックスがあり、三番のみが表示されている場合、三番のボックスが一番左に表示されています。 そこで二番のチェックボックスにチェックをして、二番のボックスを表示ると、二番が左で三番がその右に表示されます。 その際、三番が右にずれるときにアニメーションでスライドできないでしょうか。 現在のソースです。 【CSS/Script】 <script type='text/javascript' src='http://code.jquery.com/jquery-1.7.1.js'></script> <style type='text/css'> input{margin:80px 0 0 80px;} div{ display:none; margin:25px; padding:25px; background:#eee; width:200px; height:150px; float:left; } </style> <script type='text/javascript'> $(window).load(function(){ $('#check1').click(function() { $("#box1").slideToggle(this.checked); }); $('#check2').click(function() { $("#box2").slideToggle(this.checked); }); $('#check3').click(function() { $("#box3").slideToggle(this.checked); }); }); </script> 【HTML】 <p> <label><input type="checkbox" id="check1">一番</label> <label><input type="checkbox" id="check2">二番</label> <label><input type="checkbox" id="check3">三番</label> </p> <div id="box1">一番を押してでるのです</div> <div id="box2">さては二番を押したから</div> <div id="box3">どれかと思えば三番でした</div> よろしくお願いいたします。

  • jQueryでloadした要素の操作ができない

    loadにて特定のIDを読み込みした後、そのID内の要素にクラスを追加したりdiv要素を追加したりしようとしていますが、読み込んだり読み込まなかったりで困っています。 firebug、chromeは問題なし、iPhone、xperiaで読み込んだIDにaddClass, wrapが適用できません。 ページをリロードすると適用されるので、読み込みの順番かと思いますが、、、 $(window).loadもダメでした。 <div id="loading01"></div> <script type="text/javascript"> $("#loading01").load("../index.html #hogehoge"); </script> <script type="text/javascript"> $("#hogehoge").ready(function() { $('#loading01 li')addClass('css01'); $('#loading01 a').wrap('<div class="css02"><div class="css03">') }); </script> 数時間困り果てています。。。よろしくお願いします。

  • 【jQuery】サムネイル

    3つのサムネイル画像(.thumb)があります。 クリックした.thumbはopacityを1に、その他は0.5に切り替わる する方法を教えてください。 始めは1番目.thumbのopacityは1でお願いします。 ■html <div id="ph-wrap"> <div id="photo"> <p><img src="./img/photo1.png" width="480" height="320" alt="" /></p> <p><img src="./img/photo2.png" width="480" height="320" alt="" /></p> <p><img src="./img/photo3.png" width="480" height="320" alt="" /></p> </div> <div id="thumb-wrap"> <p class="thumb"><img src="./img/photo1.png" width="120" height="80" alt="" /></p> <p class="thumb"><img src="./img/photo2.png" width="120" height="80" alt="" /></p> <p class="thumb"><img src="./img/photo3.png" width="120" height="80" alt="" /></p> </div> </div> ■CSS(一部抜粋) #thumb-wrap{ float:left; margin:0 0 0 10px; padding:0; width:120px; } #thumb-wrap img{ width:120px; height:80px; cursor:pointer; opacity:0.5; -moz-opacity:0.5; /* Firefox */ filter: alpha(opacity=50); /* IE */ } .opc{ opacity:1.0; -moz-opacity:1; /* Firefox */ filter: alpha(opacity=100); /* IE */ } ■jQuery $(function () { var photoImg = "#photo img" var thumbWrapImg = "#thumb-wrap img" $("#photo p:gt(0)").hide(); $(thumbWrapImg).eq(0).css({"opacity":1}); $(thumbWrapImg).click(function () { $(this).animate({"opacity":1},100); $(photoImg).attr("src",$(this).attr("src")); }); });

  • ドラックアンドドロップ?

    質問させていただきます。 下記のようなページを作っています。 ドラック&ドロップで画像の移動が出来るページを作成しています。 ドラック&ドロップで画像を動かせるようにはなったのですが、 <div id="menu"> <ul> <li class="co_info_li_line01">担当:hoage</li> <li>03-5452-3711 hoge@hoge.co.jp</li> </ul> </div> など、メニューのulタグ、liタグ等、動かす必要の無いところ まで反応してしまいます。 回避方法がわかりません。 どなたかわかる方ご教授願います、 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <META name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 9.0.0.0 for Windows"> <META http-equiv="Content-Style-Type" content="text/css"> <title>Back and forth!</title> <link rel="stylesheet" type="text/css" href="jslib/bill.css" /> <link rel="stylesheet" type="text/css" href="jslib/highslide/highslide.css" /> <script type="text/javascript" src="jslib/prototype.js"></script> <script type="text/javascript" src="jslib/scriptaculous.js?load=effects,dragdrop"></script> <script type="text/javascript" src="jslib/bill.js"></script> <script type="text/javascript" src="jslib/highslide/highslide-with-gallery.js"></script> </head> <body> <div id="head"> <div id="birukenTop"> <a href="http://www.hogehoge.com"><h1><span>検索システム</span></h1></a></div> </div> <div id="menu"> <div id="co_info"> <p class="hello_ID">ようこそ!hoge様</p> <ul> <li class="co_info_li_line01">担当:hoage</li> <li>03-5452-3711 hoge@hoge.co.jp</li> </ul> </div> <div class="clr"></div> <div id="menu_tab"> <!- <ul> <li><img src="images/cmn/head_tag01_2.jpg" alt="検索1" width="161" height="31" border="0" /></li> <li><img src="images/cmn/head_tag02_1.jpg" alt="検索2" width="161" height="31" border="0" /></li> <li><img src="images/cmn/head_tag03_1.jpg" alt="おすすめ物件" width="161" height="31" border="0" /></li> </ul> </div> <div id="menu_tab_foot"> <ul> <li>検索3</li> <li>ページを開く</li> </ul> </div> </div> <div class="clr"></div> <div id="main"> <form name = "imagepic"> <UL id="gloop1"> <li id="2020:1"> <img src="sA01.jpg"> <input type="checkbox" id ="room" name="room" value="2020:1"> <div class="highslide-caption"> <img src="images/search_detail.gif" alt=""> </a><br> </div> </div> </li> <li id="2304:6"> <img src="sB01.jpg"> <input type="checkbox" id ="room" name="room" value="2304:6"> </div> </li> </UL> <span id="parisinfo">順番1:</span> <BR> <P><INPUT size="20" name="hid_gloop1" id="hid_gloop1info" value= "gloop1"></P> <BR> <P><INPUT size="20" name="kekka" id="kekka_id" value= ""></P> <INPUT type="button" name="登録" value="test" onclick="func_search()"> </form> </div> <div id="foot"> <p>2007</p> </div> </div> </body> </html>

  • jQueryでフォーム追加・削除

    jQuery初心者です。 タイトルの通り、jQueryにてフォームの追加と削除ができるボタンを制作しているのですが、どうも削除ボタンがうまく働いてくれません。お手上げ状態ですのでご教授いただければと思います。 仕様としては追加ボタンを押すとフォームが一つ追加され、削除ボタンを押すと一番最後のフォーム一つだけが消える、というものを目指しています。 <script type="text/javascript"> var $i = 1; $(function(){ $('#addbtn').click(function(){ var $id = $('#mo_' + $i); ++$i; $('#wan').text($i); if($i > 14){ $('#addbtn').css('display', 'none'); }else if($i > 1){ $('#delete').css('display', 'block'); } //clone()でフォームを複製 $($id).clone().insertAfter($id) .attr('id', 'mo_' + $i) .end() .find('input').each(function(idx, obj) { //alert(idx); $(obj).attr({ 'id' : $(obj).attr('id').replace(/_[0-9]+$/, $i), 'name' : $(obj).attr('name').replace(/_[0-9]+$/, $i) }).val('').end(); }); $('#delete').click(function(){ $('#wan').text($i); $('div').find('#mo_' + $i).remove(); if($i < 15){ $('#addbtn').css('display', 'block'); }else if($i < 2){ $('#delete').css('display', 'none'); } }); }); }); </script> <style type="text/css"> #delete { display:none; } #addbtn { display:block; } </style> <body> <form action="" method="post"> <input type="button" id="addbtn" value="追加"> <input type="button" id="delete" value="一つ削除"> <div id="mo_1" style="margin:5px"> <input type="text" name="sasa_1" value="" id="mom_1"> </div> <br><br> <input type="submit" value="確定"> <div id="wan"></div> </form> 宜しくお願いします。

  • ブログパーツのjquery利用について

    ブログパーツでjqueryを使用してhtmlなどを出力したいのですが、 思い通りの動作ができません。 jsファイルの中身 ------------------------------------------------------------ document.write("<script type='text/javascript' src='http://hoge.com/jquery.js'></script>"); document.write('<link rel="stylesheet" type="text/css" href="http://hoge.com/hoge.css">'); $(function() { $("div").html("<p>aaaaaaaaa</p>"); }); document.write('<div></div>'); ------------------------------------------------------------ これじゃあ、ほかのサイトからjsを読み込んでも 出力されないのでしょうか? (<script src="http://hoge.com/hoge.js"></script>) document.write("<div>aaa</div>");だけであれば、 ちゃんと出力されるのでjqueryの記述がおかしいのだと思います。 ご教授お願いいたします。

    • ベストアンサー
    • AJAX
  • 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 リンクを付与しながら文字列を表示

    はじめまして、jqueryでの質問です。 下記内容のhtmlを作成しています。 <body> <div class="main-wrap"> <div class="main-left"> <ul class="box_sample"> <li><input type="checkbox" id="list-a" name="list-a">「サンプル会社A」 <label for="list-a" class="light">aaa@aaa.com</label></li> <li><input type="checkbox" id="list-b" name="list-b">「サンプル会社B」 <label for="list-b" class="light">bbb@bbb.com</label></li> <li><input type="checkbox" id="list-c" name="list-c">「サンプル会社C」 <label for="list-c" class="light">ccc@ccc.com</label></li> </ul> </div> <div class="main-right"> <div id="show"><p></p></div> <p class="send">メール送信</p> </div> </div> <script type="text/javascript"> var $c = $('input[type="checkbox"]'); $c.bind('change', function(){ var add = ''; $c.each(function(index, value) { if (this.checked){ //チェックと同時にlabelのfor属性の値をテキストとして表示する add += ($('label[for="' + this.name + '"]').html() + '; '); } }); //id="show p"内に挿入 $('#show p').html(add); }); </script> </body> ・チェックボックスにてメールアドレスをチェック → チェックしたメールアドレスをdiv#showに表示 上記まではできたのですが、表示したメールアドレスに<a href="mailto:aaa@aaa.com;bbb@bbb.com;・・・"></a>を付与したいのですがどういった記述をすればいいでしょうか。 動的に変化するメールアドレスを取得する方法がうまくいかず悩んでおります。 ぜひご教示お願いいたします。 ※mailtoは個別ではなく、全体にかけたいと思います。(チェックしたアドレスすべてに同時送信するため) ・理想は<p class="send">メール送信</p>をクリックした際に、mailtoを起動したいです。 ・上記が難しければ、mailtoで囲んだ状態で表示させられればと思います。→アドレスクリックでメーラー起動。 よろしくお願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう