質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

4回答

3797閲覧

jQueryのnot selectorについて

JimmyKing2001

総合スコア15

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/03/16 08:44

編集2016/03/17 00:29

jQuery初心者です。下記のコードで123をクリックして反応しないようにしたいですが、今のコードは多分一番上idは”hello1”のdivが作動します。その123のdiv括りから出せばいいですが、この構造変更なしでfunction変更のみで実現可能でしょうか。

<script> $(function() { $("div").not("#hello .ka").click(function() {$(this).fadeOut('slow');}); }); </script> <div id="hello"> <div id="hello1" class="ka" >123</div> <div id="hello2" class="ki">456</div> <div id="hello3" class="ki">789</div> </div>

ご教授のほどよろしくお願いします。

ご返事遅れてすみません。たくさんご回答いただき、心より感謝いたします。どの回答も実現できて、全部ベストにしたいところです。
頑張って勉強していきますので、今後も引き続きよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

額面通りに受け取ると「#hello を含む」と受け取れますが、どちらの解釈が正しいのでしょうか。

javascript

1'use strict'; 2// #hello含む 3jQuery(function (jQuery) { 4 jQuery('#hello').on('click', function (event) { 5 var target = event.target; 6 7 if (!jQuery(target).hasClass('ka')) { 8 jQuery(target).fadeOut('slow'); 9 } 10 }); 11}); 12 13// #hello含まない 14jQuery(function (jQuery) { 15 jQuery('#hello>div:not(.ka)').on('click', function (event) { 16 jQuery(this).fadeOut('slow'); 17 }); 18});

Re: JimmyKing2001 さん

投稿2016/03/16 10:38

think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JimmyKing2001

2016/03/17 00:09

ご丁寧にご回答いただき、どうもありがとうございます。大変参考になって勉強になります。
JimmyKing2001

2016/03/17 00:31

すみません、漏れましたが、実現したいのは含むほうでした。
think49

2016/03/17 11:24

> 実現したいのは含むほうでした。 ベストアンサーに選ばれた twistist さんのコードでは「#hello を含まない」ですよ。 つまり、「#hello2 でも #hello3 でもなく、#hello な領域(#hello の padding 領域)をクリックした時」に #hello は消去されません。
JimmyKing2001

2016/03/17 13:09

補足のコメントとご注意どうもありがとうございます。皆様から書いていただいたご回答を参考に、実現したい機能を実現できました。おっしゃる通り、ベスト回答は#hello含みませんでした。padding領域まで考えませんでした、大変勉強になります。
guest

0

ベストアンサー

$("div")で返ってくるのは#hello、#hello1、#hello2、#hello3のそれぞれです。
そのそれぞれにnot("#hello .ka")を適用しても該当するものがありません。
$("div")で取得したオブジェクトのうち.kaを除外したいわけですから$("div").not(".ka")でよいです。

しかし、$("div")で取得したオブジェクトには#helloも含まれるため除外する必要があります。
前提が「div#hello直下のdivをクリック対象とする」であれば、$("#hello > div")となります。

lang

1$(function() { 2 $("#hello > div").not(".ka").click(function() {$(this).fadeOut('slow');}); 3});

投稿2016/03/16 09:18

編集2016/03/16 09:20
hineya09

総合スコア94

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JimmyKing2001

2016/03/17 00:13

ご回答いただきどうもありがとうございます。すごくわかりやすくご丁寧に説明いただいたおかげで原理を理解できました。大変勉強になります。
guest

0

単純に
$("div").not("#hello .ka")
この部分を
$("div").not("#hello,.ka")

じゃないですか?

投稿2016/03/16 09:23

T.Yokotani

総合スコア141

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

JimmyKing2001

2016/03/17 00:11

ご回答いただきどうもありがとうございます。ご回答は問題なく動きました。もうちょっと考えれば良かったです。
guest

0

javascript

1$(function() { 2 $('div.ki').click( ... ); 3}); 4```とか 5```javascript 6$(function() { 7 $('div:not(".ka")').click( ... ); 8}); 9```とかではだめですか。 10`"#hello"` ではどの `id` にもマッチしませんので、`not("#hello .ka")` でもどれも排除されないと思います。 11 12あとは、排除する条件が複雑ならば 13```javascript 14$(function() { 15 $('div').click(function() { 16 var $taget = $(this); 17 if ($target.hasClass('ka')) return false; 18 $target.fadaOut('slow'); 19 }); 20}); 21```のようにイベントハンドラの中で処理を分けるとか。

投稿2016/03/16 09:01

unau

総合スコア2468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unau

2016/03/16 10:59

↑の回答をするうえで、div#hello の存在を見落としてました。
JimmyKing2001

2016/03/17 00:17

ご回答いただきどうもありがとうございます。確かに分ける方法もありますが、ご回答の2番目の方がまとまって良さそうです。大変助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問