的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();
为什么?
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;
});
当我搜索“AU”时,即使代码示例中的AU是唯一的,也不起作用。 – Thomas1703 2013-03-24 12:55:21
@ 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();
因为没有'zip'元素。在这种情况下,'zip'是'option'元素的**属性**。您正在寻找属性选择器:http://api.jquery.com/category/selectors/attribute-selectors/。 – 2013-03-24 12:51:57
'zip'不是一个有效的html属性,而是使用'data-zip'。除此之外,你的方法对我没有多大意义。 – moonwave99 2013-03-24 12:52:46