если опция-текст не CSS, то выберите его - PullRequest
0 голосов
/ 16 апреля 2011
$("select[name=lang] > option").each(function() {
    if ($(this).text() == "CSS"){
        $("select[name=lang]").val($(this).val());
    }
}

<select name=lang>
<option value=0>Select
<option value=1>HTML
<option value=2>CSS
<option value=3>PHP
</select>

Я хочу проверить все параметры и выбрать по тексту параметров.С наилучшими пожеланиями

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Если , вы хотите выбрать опцию с текстом «CSS» (который я заключаю из вашего кода, хотя в вашем вопросе указано иное) с правильной разметкой HTML

<select name="lang">
    <option value=0>Select</option>
    <option value=1>HTML</option>
    <option value=2>CSS</option>
    <option value=3>PHP</option>
</select>

вашего кодаотлично работает: http://jsfiddle.net/fkling/sSRDR/

Правильная разметка в этом случае означает:

  • атрибуты в кавычках
  • закрытие option теги

Обычно у вас не должно быть закрывающих тегов (хотя нет причин их не иметь), браузер вставит их для вас, но в этом случае, если вы их не поместите, браузер сгенерирует

<option value=2>CSS
</option>

, что означает, что текст внутри опции имеет значение "CSS\n" (CSS + разрыв строки), и это никогда не будет равно только "CSS".

Однако, если вы можете исключить, что искомый текст может встречаться в других элементах, вы можете использовать :contains():

$('option:contains(CSS)').attr('selected', true);

С другой стороны, если вы хотите выбрать все, что не является "CSS", вам понадобится несколько полей select, так как обычно select может иметь только одну выбранную опцию:

<select multiple="multiple" name="lang">

и вы можете использовать .filter(), чтобы отфильтровать параметры:

$('select[name="lang"] > option').filter(function() {
    return $(this).text() !== "CSS";
}).attr('selected', true);

DEMO

0 голосов
/ 16 апреля 2011
$("select[name=lang] > option").click(function(e) {
    if ($(e.target).text() == "CSS"){
        return false;
    }
}
...