jQuery过滤器下拉列表

时间:2009-06-03 17:41:09

标签: jquery filter

好的我有一个国家下拉,只想展示美国和加拿大

我正在看这样的事情,但不认为我这样做是正确的

// Filter Countries
$('#selectId').filter(function() {
   return $('#option').val() == ('USA' || 'CANADA');   
});

示例HTML:

<select id="country">
  <option value="AFG">Afghanistan</option>
  <option value="ALB">Albania</option>
  <option value="ALG">Algeria</option>
  <option value="CANADA">Canada</option>
  <option value="USA">United States</option>
</select>

3 个答案:

答案 0 :(得分:8)

||构造你有无效。试试这个。

$(this).val() == 'USA' || $(this).val() == 'CANADA';  

要删除不匹配的选项,您可以执行以下操作。

$().ready( function () {
  $('#country option').filter(function() {             
     return !($(this).val() == 'USA' || $(this).val() == 'CANADA');   
  }).remove();
});    

答案 1 :(得分:1)

或者,如果列表中有很多项目需要过滤,或者您想要更改要过滤的项目,请使用:

// define this anywhere
Array.prototype.inArray = function (value) {
    var i;
    for (i=0; i < this.length; i++) {
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};

// your choice on how to provide this list, I'm using
// something simple as an example
var want = ['USA', 'CANADA'];

// now, somewhere, this filter happens
$('#selectId').filter(function() {
   return want.inArray($('#option').val());   
});

答案 2 :(得分:1)

那里有几个问题......你需要使用正确的选择器#country,过滤器只返回对象,它实际上不会对它们起作用......复合OR语法在JS中不起作用...

这有效(经过测试):

$('#country').children().each(function() {
   if ($(this).val() != 'USA' && $(this).val() != 'CANADA') $(this).remove();   
});

你必须使用remove()方法,因为hide()不会对选项元素起作用。