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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

3417閲覧

特定の子要素を持つ親要素を取得したい

takopo

総合スコア484

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/06/05 04:17

質問させてください。
例えば下記ような html があったとしまして、<ul>要素を子に持つ全ての<li>要素を取得したいと思っております。

html

1<ul> 2 <li><a href="">メニュー1</a> 3 <ul> 4 <li><a href="">メニュー1-1</a> 5 <ul> 6 <li><a href="">メニュー1-1-1</a></li> 7 <li><a href="">メニュー1-1-2</a></li> 8 </ul> 9 </li> 10 <li><a href="">メニュー1-2</a></li> 11 </ul> 12 </li> 13 <li><a href="">メニュー2</a></li> 14 <li><a href="">メニュー3</a> 15 <ul> 16 <li><a href="">メニュー3-1</a></li> 17 <li><a href="">メニュー3-2</a></li> 18 </ul> 19 </li> 20</ul>

jQuery では .has()メソッドがあるのですが、JavaScript では同じような機能が見つからず、下記のようにして何とか想定した要素を取得することができました。

javascript

1// <li> 直下の子要素の <ul> を取得 2const children = document.querySelectorAll('li > ul'); 3 4for (const child of children) { 5 // <ul> の親要素の <li> を取得 6 const parent = child.parentNode; 7 parent.style.backgroundColor = '#fcc'; 8}

ただこれだとなんとなく冗長で、.has() メソッドのように1~2行ぐらいでもう少しシンプルに書けないかなと思っております。
どなたかもし詳しい方がいらっしゃいましたらご教授いただけると助かります。

よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんにちは。
単に短くということでしたら、forEach()を使ってこうですかね。

js

1document.querySelectorAll('li > ul').forEach((element) => { 2 element.parentNode.style.backgroundColor = '#ccf'; 3});

投稿2021/06/05 05:39

neonemo

総合スコア191

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

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

takopo

2021/06/05 06:46

ご回答ありがとうございます。 forEach を使った方法も良さそうですね。参考にさせていただきます。
guest

0

関数化して引数で渡すしかないのではないでしょうか。

function aHasBChangeColor(a,b,color){ const children = document.querySelectorAll(a+ '>' +b); for (const child of children) { // <ul> の親要素の <li> を取得 const parent = child.parentNode; parent.style.backgroundColor = color; } } aHasBChangeColor('li','ul','#fcc');

投稿2021/06/05 05:42

gas.engine

総合スコア608

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

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

takopo

2021/06/05 06:45

ご回答ありがとうございます。 関数化ですね、参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問