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

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

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

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

Q&A

解決済

2回答

733閲覧

jQueryにて先祖要素内にある特定の要素にクラスを追加したい

Yui_note

総合スコア15

jQuery

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

0グッド

0クリップ

投稿2020/11/07 21:09

編集2020/11/07 22:00

ページ内に複数あるinput要素それぞれにある特定のクラスをつけている場合に、disabledを付与し挙動を無効化して
さらに、その要素の先祖にある特定のクラスに追加でクラスを付与したく思っております。

試したコードは以下になります。

HTML

1<tr> 2 <th>aaa</th> 3 <td> 4 <div class="set-radio"> 5 <span class="set-radio__inner"> 6 <label> 7 <input type="radio" name="seminar" value="seminar1" class="set-input-radio -no-set"> 8 <span class="set-input-mark -radio-left"></span> 9 <span class="set-radio-txt">あり</span> 10 </label> 11 </span> 12 </div> 13 </td> 14...

jQuery

1$(function(){ 2 if($(".-no-set").prop('disabled', true)){ 3 $(this).parents().find(".set-radio").addClass("no-active") 4 } 5}); 6

上記コードで、table内のtd要素の中にある「.set-radio」に、「no-active」クラスを付与したいのですが、
追加されません。各trの中にset-radioクラスがあり、それぞれのtrで個別に付与したい状況ですが、
解決まで至りません。

初歩的なところで申し訳ありませんが、
もし方法をご存知の方がいらっしゃいましたらお力をお貸しいただけないでしょうか。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

parents()だとすべての祖先を遡ります。documentまで。それにfindするのですからすべて対象になります。parentsの引数にセレクタを設定して対象を絞ってください。

js

1$(function(){ 2 $(".-no-set").prop('disabled', true).parents(".set-radio").addClass("no-active"); 3});

.set-radio が一つだけなら、直近の祖先を探すclosestでいいでしょう。

js

1$(function(){ 2 $(".-no-set").prop('disabled', true).closest(".set-radio").addClass("no-active"); 3}); 4

投稿2020/11/08 00:54

hatena19

総合スコア33784

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

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

Yui_note

2020/11/08 01:08

ありがとうございます!!closestの方でやりたい事ができました! parents()は全ての先祖を遡るんですね、 全ての先祖というのは親要素内にて全てを遡るものだと勝手に思っていたのですが、 ページ内全てになるんですね。なるほどです。。 また1つ勉強になりました。 本当に本当に助かりました。。 ありがとうございました。m 引き続き勉強に精進します。
hatena19

2020/11/08 01:30 編集

ちょっと誤解しているかも。 「全ての先祖というのは親要素内にて全てを遡る」という理解であってます。(≠ページ内全て) 一つの上の親でfind、さらにその上の親でfind、・・・最終的にdocumentでfind というように祖先すべてでfindするので、ページ内全てが対象になってしまうということです。 findは子要素全てを対象に検索しますので。
Yui_note

2020/11/08 02:03

追加コメントありがとうございます! そうですね、自分でも上の文章を書いた後になんかおかしいなと思いました。。 結局の所、親要素→親要素と遡っていくとbodyまで遡って行くので、 ページ内全てをfindすることになりますよね。。 今回は、closestの使用で直近の先祖を探すというところと、 ifを使わない書き方のところが自分ではできなかったので、 もう一度いただいたコードを見直したいと思います。 すみません、、ありがとうございました。。m
guest

0

現状のthisが指しているのは$(function(){がトリガーとなっているのでdocument自身になっています。

js

1 if($(".-no-set").prop('disabled', true)){ 2 console.log($(this))

そのまま指定すれば良いのでは。

js

1$(".-no-set").parents().find(".set-radio").addClass("no-active") 2

実行結果のHTML
イメージ説明

投稿2020/11/07 21:15

m.ts10806

総合スコア80859

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

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

Yui_note

2020/11/07 21:31

アドバイスいただきありがとうございます! どこがトリガーになっているのかという事があるんですね..初めて知りました。 ありがとうございます。。 いただいたコードを試してみましたところ、確かにクラスは付与されるのですが、 set-radioクラスがある要素全てにno-activeクラスが付与されている状態です。 只今HTMLのコードを少し修正させていただいたのですが、 実際にはtableタグ内で使用しておりまして、各trのtd内にset-radio要素がありまして そちらの中だけで適用させたいと思っております。 $('table tr td').each(function(index) { $(".-no-set").parents().find(".set-radio").addClass("no-active") }); 上記のコードで試してみましたが、まだページ内全てのset-radioにクラスが付与されてしまいます。 こういった場合には、どの様にしたらよろしいでしょうか・・。 何度も申し訳ございませんが、ぜひお力をお貸しいただきたいです。 どうぞよろしくお願いいたします。m
m.ts10806

2020/11/07 21:38

「-no-set」クラスが付与されている クラスが基準ですよね?
m.ts10806

2020/11/07 21:39

全体のHTML構造次第だと思います。 子から親を辿るより親から子を頼ったほうがいいかもしれません。 hasClass()を組み合わせると良いかもしれません。
Yui_note

2020/11/07 21:42

ご返信ありがとうございます。 はい、「-no-set」クラスとdisabledを付与している要素が基準になります。
Yui_note

2020/11/07 21:52

ありがとうございます! アドバイスを元にもう少しトライしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問