2017-04-12 7 views
1

HTMLjQueryのCSSセレクタ一致フォーム配列名

<input name="single"> 

<input name="multi[]"> 
<input name="multi[]"> 

<input name="multi_keys[my]"> 
<input name="multi_keys[key]"> 

jQueryの

var match_single  = $('[name="single"]'); 
var match_multi  = $('[name="multi"]'); // No match 
var match_multi_keys = $('[name="multi_keys"]'); // No match 

console.log(match_single.length); 
console.log(match_multi.length); 
console.log(match_multi_keys.length); 

他のセレクタが正しくないのでのみmatch_singleと一致します。

どうすればフォームフィールド配列にも一致させることができますか?

私はこれを行うことができます:

var match_multi  = $('[name="multi[]"]'); 

をどのようにキーが内部があるとき、私は一致すると、彼らが不明であることができますか?私はこのようにそれを書きたいと思います:

$('[name="multi_keys*'); 
+0

属性値と一致しない、クラスセレクタを優先する。 – dfsq

+0

@dfsq私はhtml出力をあまり支配していないフォームで作業しています。私はjQueryとdomで何らかの方法を理解する必要があります。 –

答えて

5

あなたは属性で始まるものを一致する^=を使用することができます。これは両方name="multi[]"name="multi_keys[]"と一致することを

$('[name^="multi"]') 

注意。あなたは別途multi[]multi_keys[]を選択したい場合は、単にそのセレクタに開く角括弧を追加することができます。

$('[name^="multi["]') 

...と:

$('[name^="multi_keys["]') 

[att^=val]

接頭辞 "val"で始まるatt属性を持つ要素を表します。 "val"が空文字列の場合、セレクタは何も表しません。

W3C's Selectors specification

+0

それは本当に素晴らしいです!私は本当にあなたがその落とし穴とその修正についても考えてくれてうれしいです。 –

0

この$('[name*="multi"]');

var match_single = $('[name="single"]'); 
 
var match_multi = $('[name*="multi"]'); // No match 
 
var match_multi_keys = $('[name*="multi_keys"]'); // No match 
 

 
console.log(match_single.length); 
 
console.log(match_multi.length); 
 
console.log(match_multi_keys.length);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input name="single"> 
 

 
<input name="multi[]"> 
 
<input name="multi[]"> 
 

 
<input name="multi_keys[my]"> 
 
<input name="multi_keys[key]">

0

よう=あなたは$('[name^=multi_keys]')のように、入力名の接頭辞を照合することによって、これらの入力を照会することができます前に、*を使用だからそれは選ぶだろう'namemulti_keysで始まります。しかし、それはかなりハッキーです。

関連する問題