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

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

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

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

jQuery

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

Q&A

解決済

2回答

400閲覧

複数の要素に同じ処理と別の処理をしたい場合、同じ処理はfor文の外?中?

harapara

総合スコア39

HTML5

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

jQuery

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

0グッド

0クリップ

投稿2022/09/26 07:59

前提

・複数の要素に同じ処理と各々別の処理をしたい
・別の処理はfor文で処理
同じ処理の実行場所で、以下の2つに違いはありますか?(処理の速度・可読性など)
①for文内で共通のクラス操作
②for文の外で共通のクラス操作

該当のソースコード

HTML

1<button class="sec-1-btn" onclick="secBtn()">Section 1</button> 2<div class="select q-a">Question A</div> 3<div class="select q-b">Question B</div> 4<div class="select q-c">Question C</div>

①for文の中で共通のクラス操作

JavaScript

1const array1 = ['a','b','c'] 2function secBtn(){ 3 for (const value of array1) { 4 $(".q-"+ value).addClass('red'); //or $(".select").addClass('red'); 5 $(".q-"+ value).data('value' ,value ); 6 } 7};

②for文の外で共通のクラス操作

JavaScript

1const array1 = ['a','b','c'] 2function secBtn(){ 3 $(".select").addClass('red'); 4 for (const value of array1) { 5 $(".q-"+ value).data('value' ,value ); 6 } 7};

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

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

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

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

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

yambejp

2022/09/26 08:12

q-aかつq-bのクラスをもつ場合data-valueは何になる想定でしょうか?
harapara

2022/09/26 08:33

はい、deta属性は以下になる想定です↓ <div class="select q-a" data-value="a">Question A</div> <div class="select q-b" data-value="b">Question B</div> <div class="select q-c" data-value="c">Question C</div>
yambejp

2022/09/26 08:43

q-aかつq-bとは以下のようなイメージです。 <div class="select q-a q-b" data-value="a">Question</div> <div class="select q-a q-b" data-value="b">Question</div> <div class="select q-a q-b" data-value="a,b">Question</div> クラスで処理する限り常についてくる問題です data-valueはどうなるのが正解でしょうか? q-aかつq-bは絶対に発生ししないという運用ルールなのでしょうか?
harapara

2022/09/26 08:49

仰るようにq-aかつq-bは絶対に発生ししないという運用ルールになります!
guest

回答2

0

ざっくりこんなかんじ
(jQueryは汎用性重視のため文法はなるべく古い書き方をしておきます)

javascript

1const array1 = ['a','b','c'] 2function secBtn(){ 3 $(".select").addClass('red').attr('data-value',function(){ 4 for(var i=0;i<array1.length;i++){ 5 if($(this).hasClass('q-'+array1[i])){ 6 return array1[i]; 7 } 8 } 9 }); 10};

※ごめんなさい、ちょっとおかしかったの修正しました

投稿2022/09/26 08:53

編集2022/09/26 09:03
yambejp

総合スコア114769

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

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

harapara

2022/09/26 09:54

ありがとうございます! ①②よりも上記が一番汎用性のあるコードということですね とてもためになりました、、
guest

0

ベストアンサー

jQueryを使っている時点で処理速度云々は無意味でしょう。バニラJSでということになります。
$(".select").addClass('red');でも内部的にはループ処理していますし。

ということで、考慮するなら可読性です。

可読性は個人差があると思いますが、提示の例なら②の方が可読性は高いと思います。

投稿2022/09/26 08:11

hatena19

総合スコア33699

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

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

harapara

2022/09/26 09:50

ご回答ありがとうございます! 処理速度はあまり変わらず(バニラJSが◎)、可読性が主な違いになるのですね。 これを機に、バニラJSとjQueryの処理速度の違いもきっちり学んでみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問