【JavaScript/jQuery】classの前方一致、後方一致
name属性とかclass名で処理を分けたい
ブログでも登録フォームでも良いが、同じページ内で同じ処理を行う場合がある。
複数あるtooltipをクリックする。タブやメニューを切り替えたい。次へとか送信ボタンとか同じ挙動させたい等々。
その場合に、class名を揃えてやって連番で分けたり、処理が同じであれば、便宜上似たようなclass名を付けたりするが、同じnameがあるのならば、まとめて記述してやって、コードをシンプルにできる。
//前方一致
$("[class^='modal_']").fadeIn();//特定の名前で始まるclass名に対して処理
//後方一致
$("[class$='_modal']").fadeIn();//特定の文字で終わるclass名に対して処理
//その他
$("[class*='modal']").fadeIn();//特定の文字を含むclass名に対して処理(部分一致)
class名の前方一致、後方一致をやったが、実際はname属性を使っているのを目にする。
//name属性で
<input name="example0" type="text">
<input name="example1" type="text">
<input name="example2" type="text">
<div name=”a_example”>example0</div>
<div name=”b_example”>example1</div>
<div name=”c_example”>example2</div>
これをこんな感じにする。
$("input[name^='example']").val();
$("div[name$='example']").val();
コード的にはシンプルだが、速度的な面でclassセレクタの方が推奨されている。
However it will be slower than using a class selector so leverage classes, if you can, to group like elements.(ただし、クラスセレクタを使用するよりも時間がかかる)
Attribute Starts With Selector [name^=”value”] より
例えば、各々にclassを適用。
<input name="example0" type="text" class="example">
<input name="example1" type="text" class="example">
<input name="example2" type="text" class="example">
$(".example").val();
別にclassセレクタを使っているから、その上で、class名ごとに処理を分けたい場合に使い分ければ良い気がする。
//前方一致
$("[class^='modal_']").fadeIn();//特定の名前で始まるclass名に対して処理
//後方一致
$("[class$='_modal']").fadeIn();//特定の文字で終わるclass名に対して処理
//その他
$("[class*='modal']").fadeIn();//特定の文字を含むclass名に対して処理(部分一致)
参照
・Attribute Starts With Selector [name^=”value”]
・Attribute Ends With Selector [name$=”value”]