如果选项文本不是CSS,那么选择它

时间:2011-04-16 10:52:03

标签: jquery select option

$("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>

我想检查所有选项并按optiontext选择。 最好的问候

2 个答案:

答案 0 :(得分:2)

如果您要选择带有文字'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代码

通常你不必有关闭标签(虽然没有理由没有它们),浏览器会为你插入它们,但是在这种情况下,如果你不放它们,浏览器将生成< / p>

<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

答案 1 :(得分:0)

$("select[name=lang] > option").click(function(e) {
    if ($(e.target).text() == "CSS"){
        return false;
    }
}