我有一个包含多个项目的选择列表,我希望能够通过输入到某个文本字段中的文本进行过滤。如果您只是在迭代每个选项时执行js contains,这非常简单。但是在某些情况下有很多选项,所以我使用了jQuery:
var results = $("#myList options").find("option[text*=" + someVal.toUpperCase() + "]");
这在IE中工作得很好,但在Chrome中却没有,我根本找不到原因(Firebug在这个页面上根本不起作用,但这是暂时的。
也许是因为“text”实际上并不存在于html选项中,但是没有按值搜索也会失败。有什么想法吗?
答案 0 :(得分:2)
这里有很多错误......
var results = $("#myList options").find("option[text*=" + someVal.toUpperCase() + "]");
// ^ ^
上面的代码,将获得所有options
'(带有s
的选项)。然后查找包含someVal.toUpperCase()
值的文本属性的子选项.......
我想你会想要这样,
var results = $("#myList option").map(function(){
if ($(this).text().indexOf(someVal)!= -1 ) { return this; }
}).get();
答案 1 :(得分:2)
改为使用jQuerys .filter()。
var results = $("#myList").children('option').filter(function(){
return ( $(this).val().indexOf(someVal.toUpperCase()) > -1 );
});
答案 2 :(得分:1)
我刚刚在chrome上尝试了以下内容: http://jsbin.com/olida3/edit
正确警告“1”代表“测试”
$('#myList option[value*='+val+']');
或者您也可以像
一样编写它$('option[value*='+val+']', '#myList');