2013-03-24 183 views
0

我在一個<select>和和額外的屬性很多<option>叫做zip的jQuery多個選擇器(

<SELECT id="city"> 
    <OPTION zip="AUC 1291 100005" value="1">City 1</OPTION> 
    <OPTION zip=" 1295 100006" value="2">City 2</OPTION> 
    <OPTION zip=" 1299 100008" value="3">City 3</OPTION> 
</SELECT> 

現在我想選擇哪個文本或ZIP包含一個字符串值的選項,但下面的代碼不起作用。

var val = '1291'; //Zip code 
var x = $('#city option:contains('+val+'), #city zip:contains('+val+')').val(); 

爲什麼?

+0

因爲沒有'zip'元素。在這種情況下,'zip'是'option'元素的**屬性**。您正在尋找屬性選擇器:http://api.jquery.com/category/selectors/attribute-selectors/。 – 2013-03-24 12:51:57

+1

'zip'不是一個有效的html屬性,而是使用'data-zip'。除此之外,你的方法對我沒有多大意義。 – moonwave99 2013-03-24 12:52:46

回答

0

contains檢查內部元素不是屬性,就應該像去:

$('#city option').filter(function(){ 
    return this.innerHTML.indexOf(val) > -1 || 
      $(this).attr('zip').indexOf(val) > -1; 
}); 

注意zip不是有效的HTML屬性,這將是明智的使用data-zip代替。

$('#city option').filter(function(){ 
    return this.innerHTML.indexOf(val) > -1 || 
      $(this).data('zip').indexOf(val) > -1; 
}); 
+0

當我搜索「AU」時,即使代碼示例中的AU是唯一的,也不起作用。 – Thomas1703 2013-03-24 12:55:21

+0

@ Thomas1703,你可以使用'indexOf'作爲我更新的答案。 – gdoron 2013-03-24 12:57:03

3

如果要選擇帶屬性的元素,taht值包含請求的字符串,你必須使用:

var val = '1291'; //Zip code 
    var x = $('#city option[zip*="' + val + '"]').val(); 

如前所述:http://api.jquery.com/attribute-contains-selector/

但作爲球員說,更好的方式是讓HTML5 data-zip屬性代替zip

(只是前綴爲data-)。

在這種情況下,您的選擇將是:

var x = $('#city option[data-zip*="' + val + '"]').val(); 

希望它幫助。

0

這裏是我的問題的答案。測試和工作:)

var x = $('#city option:contains('+val+'), #city [data-zip*='+val+']').val();