jquery 过滤一个 select 其选项包含一些字符串

jquery filter a select which its options contains some string

考虑下面select

<select id="phone_line" name="phone_line">
    <option value=""></option>
    <option value="BB-11">Line 1</option>
    <option value="AA-22">Line 2</option>
    <option value="AA-33">Line 3</option>
    <option value="BB-44">Line 4</option>
</select>

如果我想过滤选项并删除值为 BB-44 的行,我可以这样做:

$('#phone_line option').filter(' option[value="BB-44"] ').remove();

如果我想删除它们的值以 开始 AA 的行?我可以按以下方式进行操作:

$("#phone_line > option").each(function () {    
    if (this.value.substring(0, 2) === 'AA') {
        $("#phone_line option[value='" + this.value +"']").remove();
    }
});

但是我可以用过滤器来做吗(在一行中?!)。代码在:

http://jsfiddle.net/mpp4emd1/

你可以用 $("#phone_line option").filter('[value^="AA"]').remove();

试试这个:

$('#phone_line').find('option[value^="AA"]').remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select id="phone_line" name="phone_line">
    <option value="">select phone line...</option>
    <option value="BB-11">Line 1</option>
    <option value="AA-22">Line 2</option>
    <option value="AA-33">Line 3</option>
    <option value="BB-44">Line 4</option>
</select>

$('#phone_line').find('option[value^="AA"]') 这是一个 returns 集合,您不需要 .filter() 删除 starts/contains 值 AA 的选项。

使用属性 starts with 选择器就可以了

$('#phone_line option[value^="AA"]').remove();

参考:Attribute Starts With Selector [name^="value"]

DEMO

对于更复杂的过滤,请使用 filter(function)

$("#phone_line > option").filter(function () {    
   return this.value.substring(0, 2) === 'AA';
}).remove();

我认为这可以解决问题:

$('#phone_line option').filter(' option[value^="AA"] ').remove();

Fiddle