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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

Q&A

解決済

1回答

3227閲覧

複数の要素に対してjQueryを実行したい

pitacora

総合スコア20

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

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

0グッド

0クリップ

投稿2017/06/05 03:37

編集2017/06/05 04:44

複数の要素に対して、それぞれ処理を実行する必要があり、jQueryプラグイン化すれば、同じ記述を何度もしなくてもソースを短くすることが可能ではないかと考え、やってみたのですがうまくいかずに困っています。
何か良いお知恵をお貸しいただけないかと思い投稿させていただきました。


やりたいこと

  • .sec1の.btnがクリックされたら、そのなかのhogeがfadeoutする
  • .hogeの高さは各secの.textを取得し、CSSに追加する

html

1<div class='sec1'> 2 <a class='bth'>クリック</a> 3 <div class='hoge'></div> 4 <div class='text'>テキストテキスト</div> 5</div> 6<div class='sec2'> 7 <a class='bth'>クリック</a> 8 <div class='hoge'></div> 9 <div class='text'>テキストテキスト</div> 10</div>

js

1;(function($) { 2 $.fn.hoge = function() { 3 $content = $(this); 4 function resizeCon () { 5 var $w = $(window), 6 h = $content.find('.text').outerHeight(); 7 $content.find('.hoge').css({ 8 width: w, 9 height: h, 10 }); 11 } 12 resizeCon(); 13 $(window).resize(resizeCon); 14 $content.find('.btn').click(function() { 15 $content.find('.hoge').fadeOut(800); 16 }); 17 } 18})(jQuery); 19$(function() { 20 $('.sec1').hoge(); 21 $('.sec2').hoge(); 22});

現状
やりたいことの2つ目はうまくいっているようなのですが、1つ目がうまくいかない状況です。
.sec2の.btnをクリックすると.sec2のhogeがfadeoutするのですが、.sec1をクリックしても.sec2のhogeが消えていってしまいます。
処理が上書きされているのだろうか…とは思うのですが…。

誰かにソースを見てもらう機会もなく、プラグイン化もはじめてで、これでよいのかどうなのかわからないまま書きすすめてしまっています、もし何かアドバイスいただけるようでしたら是非お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

.hogeの高さは各secの.textを取得し、CSSに追加する

が、いまいち何をしたいかわからないのですが、本題はsec1をクリックして
その中のhogeだけ対象にするという話のようなので以下でどうでしょうか?

javascript

1$(function(){ 2 $('.sec1').on('click',function(){ 3 $(this).find('.hoge').fadeOut(); 4 }); 5}); 6

投稿2017/06/05 03:48

yambejp

総合スコア114779

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

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

pitacora

2017/06/05 05:13

回答いただいてありがとうございました。 .sec1、.sec2、.sec3…(要素はいくつもあり、今後も増えていく)のです。 ですので、できれば、要素ごとにコードを書くのではない方法がないかなと考えています。私の理解力不足でしたら申し訳ありません。 .sec2に対しては以下のように指定していかなくてはならない…という解釈をしたのですが、間違っていたら申し訳ないです。 $(function(){ $('.sec1').on('click',function(){ $(this).find('.hoge').fadeOut(); }); $('.sec2').on('click',function(){ $(this).find('.hoge').fadeOut(); }); });
yambejp

2017/06/05 05:15

$('.sec1,.sec2,.sec3').on('click',function(){ というように羅列すればいいですよ
yambejp

2017/06/05 05:20

若しくは <div class='sec1 sec_group'> <a class='bth'>クリック</a> <div class='hoge'></div> <div class='text'>テキストテキスト</div> </div> <div class='sec2 sec_group'> <a class='bth'>クリック</a> <div class='hoge'></div> <div class='text'>テキストテキスト</div> </div> のようにグルーピングをおこなって $('.sec_group').on('click',function(){ とするとか・・・
pitacora

2017/06/05 05:39

再び回答いただいてありがとうございました。 回答いただいたコードで試したところ、.secをクリックしたらそれぞれ期待どおりになりました。 大変申し訳ないのですが、回答いただいた点について見逃しており、修正いたしました。 .sec1をクリックするのではなく、.sec1のなかの.btnをクリックしたいのです…。
yambejp

2017/06/05 05:57 編集

ああ、ボタンですね 親に遡って子供をチェックするなら $('.sec .bth').on('click',function(){ $(this).closest('.sec').find('.hoge').fadeOut(); }); 自分と並列のタグをチェックしたいならこう $('.sec .bth').on('click',function(){ $(this).siblings('.hoge').fadeOut(); }); クラス名がbthになっていますがbtnじゃなくて大丈夫でしょうか
pitacora

2017/06/05 07:23

親に遡って子をチェックすることができるのですね…勉強不足でした。とても勉強になりました。ありがとうございました。 またクラス名についても失礼しました、焦っていて間違えてしまったようです、お恥ずかしいです……。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問