的jQuery多个选择器(

问题描述:

我在一个<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

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

如果要选择带属性的元素,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(); 

希望它帮助。

这里是我的问题的答案。测试和工作:)

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