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

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

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

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

jQuery

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

Q&A

解決済

2回答

1340閲覧

複数の要素の存在確認の条件分岐のスマートな書き方は?

pandako

総合スコア6

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2019/12/18 10:13

編集2019/12/18 11:25

複数の要素の存在確認をして、すべてあれば実行する。いずれかがなければ実行しない。
などの条件分岐を書きたいです。

以下のようにかけば良いと思いますが、
この&&が増えていく可能性があり、もっとスマートに書く方法はありますか?

変数はどの要素もあとから別の場所で使用したいので別々に変数宣言しています。

var $hoge = $('.hoge'); var $fuga = $('.fuga'); var $piyo = $('.piyo'); var $puyo = $('.puyo'); if ($hoge[0] && $fuga[0] && $piyo[0] && $puyo[0]) { console.log('すべて存在する'); } else { console.log('いずれか存在しない'); }

もしあればご教示いただきたいです。

追加です。変数宣言の部分ですが、実際には以下のような複雑な取得方法が必要なため
変数宣言の部分は変えたくないです。

var $hoge = $('.hoge').find('a'); var $fuga = $('.fuga').nextUntil('p'); var $piyo = $('.piyo').eq(0); var $puyo = $('.puyo').parent('div');

その他にも..以下のようなこともありそう等、他にも理由あるので変数宣言は変えず、
条件分岐の&&をたくさんつないでいく書き方スマートにしたいです。

var $hogehoge = $('img[alt="hogehoge"]').closest('.fugafuga'); var $fugafuga = $('a:contains("ふがふが")').parent('section').eq(1);

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

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

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

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

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

guest

回答2

0

ベストアンサー

JavaScript

1[$hoge, $fuga, $piyo, $puyo].every(function(j) { return j.length; })

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/every

投稿2019/12/19 04:29

x_x

総合スコア13749

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

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

pandako

2019/12/23 00:41

every()とsome()は便利そうだったのと、 シンプルな書き方がJS初心者でも何をやっているかパッと見て把握しやすいため、 ベストアンサーに選ばせていただきます。
guest

0

javascript

1$(function(){ 2 var a=['.hoge','.fuga','.piyo','.puyo']; 3 var flg=a.map(x=>$(x).length>0).indexOf(false)>-1; 4 console.log(flg); 5});

投稿2019/12/18 10:23

yambejp

総合スコア114843

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

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

pandako

2019/12/18 10:41

ありがとうございます。 すみません情報不足していたので追記しましたが、実際にはクラス名の部分はもっと複雑な取得方法が必要でした。 ifの条件の部分がもっとスマートに書けますでしょうか。
yambejp

2019/12/18 11:14 編集

以下でいけるのでは? $('.hoge').find('a') → '.hoge a' $('.fuga').nextUntil('p')→ '.fuga ~ :not(p)' ※調整 $('.piyo').eq(0) →'.piyo' (0番目の要素は.piyoを探すのと同意) $('.puyo').parent('div') → 'div .puyo'
pandako

2019/12/18 11:12

たしかに、CSSセレクタでなんとかいけそうなところもあります! ありがとうございます!
pandako

2019/12/19 00:29

ご教示いただいた方法でやってみたのですが、 やはり色々理由あり、変数もあとから使うので変数部分はそのままにしたいです。 もし条件の&&のつなぐ方法で他に書き方あればご教示ください!
yambejp

2019/12/19 00:58 編集

まぁ普通にこうすればいいんですけどね $(function(){ var $hoge = $('.hoge').find('a'); var $fuga = $('.fuga').nextUntil('p'); var $piyo = $('.piyo').eq(0); var $puyo = $('.puyo').parent('div'); var a=[$hoge,$fuga,$piyo,$puyo]; var flg=a.map(x=>x.length>0).includes(false); console.log(flg); });
pandako

2019/12/19 11:36

なんと・・! なるほど・・ありがとうございます。 やってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問