2

基于以下标记,我将如何(在 JQuery 中)选择以Urgent-or开头的选项Urgent -

<select name="List1" id="list1">
<option>One</option>
<option>Two</option>
<option>urgent-Three</option>
<option>Urgent-Four</option>
<option>Urgent - Five</option>
</select> 

根据下面的答案,我使用以下 JQuery 将匹配的元素包装在<optgroup>.

$opts = $("#list1 > option").filter(function() {
    return /^Urgent\s?-/.test(this.innerHTML);
});

$opts.wrapAll('<optgroup label="Urgent">'); 

我需要从选项文本中删除匹配的文本,从而产生如下标记:-

    <select name="List1" id="list1">
    <option>One</option>
    <option>Two</option>
    <optgroup label="Urgent">
    <option>Three</option>
    <option>Four</option>
    <option>Five</option>
    </optgroup>
    </select> 
4

1 回答 1

5

您可以使用filter方法和正则表达式

$("#list1 > option").filter(function() {
    return /^Urgent\s?-/.test(this.innerHTML);
});

演示:http: //jsfiddle.net/th83R/


更新。要遵循您更新的问题,您必须稍微修改代码。

$("#list1 > option").filter(function() {
    var newVal = this.innerHTML.replace(/^urgent\s?-\s?/i, "");
    if (newVal != this.innerHTML) {
        this.innerHTML = newVal;
        return true;
    }
    return false;
}).wrapAll('<optgroup label="Urgent" />');​

演示:http: //jsfiddle.net/th83R/3/

于 2012-05-18T13:50:55.710 回答