2012-05-18 2 views
2

Основываясь на нижеприведенной разметке, как (в JQuery) выбрать опции, начинающиеся с Urgent- или Urgent -?JQuery выберите все параметры, которые начинаются с '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> 

ответ

5

Вы можете использовать filter метод и regular expressions:

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

DEMO: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" />');​ 

DEMO:http://jsfiddle.net/th83R/3/

+0

+1, то * точный * тот же код, который я собирался опубликовать! –

+0

Как мне изменить это, чтобы игнорировать случай, например, соответствовать «срочно», а также я использую код для выполнения «wrapall» в теге после этого, как бы удалить текст с тегом. Изменит вопрос. –

+1

Вы можете использовать флаг 'i' в регулярном выражении:'/^ неотложный \ s? -/i'. – VisioN

Смежные вопросы