2017-04-12 63 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[]"name="multi_keys[]"。如果您想選擇multi[]multi_keys[]分開,你可以開放方括號簡單地添加到選擇:

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

...和:

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

[att^=val]

表示具有att屬性的元素,其值以前綴「val」開頭。如果「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開頭。但這很不方便。