質問するログイン新規登録

Q&A

解決済

1回答

1880閲覧

display:noneでない最初の要素のidを取得したいのですが、できません…

ekitabi

総合スコア27

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

1クリップ

投稿2022/03/06 08:39

0

1

Javascriptを用いて、[display:none]でない要素の中から一番最初の要素のidを取得したいと思っています。

HTML

1<ul class="test"> 2<li id="1" style="display:none;">AAA</li> 3<li id="2">BBB</li> 4<li id="3">CCC</li> 5</ul>

上記のコードの場合、

display:noneでない最初の要素のidは「2」になるのですが、これを取得することが出来ません。

display:noneの位置は変動するため、[liの2個目の要素のidを取得]といった方法ではなく、display:noneの箇所の変動に対応できる方法で記述したいと考えています。

【試したこと】

javascript

1//取得できず 2document.querySelector('.test li[style*="display: block;"]:first-child').id; 3//取得できず 4document.querySelector('.test li:first-child').filter(function() {return $(this).css('display') !== 'none';}).id;

・querySelector内で、条件を指定する
・filterを活用して、条件を指定する

という2通りの方法を見つけましたが、その条件で絞った中の_1番最初の要素_という記事が見つけれらず、解決できずにいます。
(記述の仕方がおかしいのかなといじってみましたが、なかなか出来ず…)

初歩的な質問かもしれませんが、ご存知の方いらっしゃいましたら、どうかヒントをいただけますと幸いです。
何卒よろしくお願いいたします。

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

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

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

guest

回答1

0

ベストアンサー

querySelector() は "指定されたセレクターまたはセレクター群に一致する、文書内の最初の Element を返します。" ので、first-childは不要です。

display: noneでないのであれば :not() がセレクターとしては有効です

js

1document.querySelector('.test li:not([style*="display:none"])');

が、変更に弱いのでセレクターで指定するのではなくfilterしたほうがよいでしょう。
ところで前述の通り querySlector() は最初のElementにを返します(1個しか返しません)ので、filterをかけるには不適切です。filterは複数の中から必要なものを取り出すためのものです。

セレクターに一致する NodeList (複数のElement) を返すのは querySelectorAll() です。返ってくるのは NodeList であって Array ではなく、 filter() メソッドは持ち合わせていません。適宜Arrayに変換するなどして対応してください。

js

1[...document.querySelectorAll('.test li')].filter(li => li.style.display !== 'none')[0];

投稿2022/03/06 09:13

thyda.eiqau

総合スコア2982

ekitabi

2022/03/06 10:03

分かりやすく説明してくださりありがとうございました!!! おかげさまで、実現できました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問