jquery选择如果option.value等于某事,则标记一个选中的

Gib*_*rno 17 jquery jquery-selectors

我有一些关于jquery选择的问题.在我的情况下,如果option.value相等的东西如何匹配,标记selected为它.在线代码在这里

再次重复代码.它引起了Uncaught TypeError: Object #<HTMLOptionElement> has no method 'val',如何以我的希望工作?谢谢.

<script type="text/javascript">
$(document).ready(function(){
    var num = 3;
    $("div#selection select.select option").each(function(){
        if((this).val()==num){
            $(this).attr("selected","selected");    
        }
    });
});
</script>
<div id="selection">
    <label>Label1:</label>
    <select class="select">
        <option value="1">V1</option>
        <option value="2">V2</option>
        <option value="3">V3</option>
    </select>
    <label>Label2:</label>
    <select class="select">
        <option value="4">U1</option>
        <option value="5">U2</option>
        <option value="6">U3</option>
    </select>
</div>
Run Code Online (Sandbox Code Playgroud)

Tim*_* S. 19

你弄错了

而不是(this).val()你应该$(this).val()在你的if语句中使用.this指的是HTMLObject,$(this)指的是jQuery对象.因为该.val()方法是jQuery框架的一部分,所以不能在HTMLObjects上使用它.但我相信你知道这一点,因为它看起来非常像一个小错字.

这应该工作:

$(document).ready(function(){
    var num = 3;
    $("div#selection select.select option").each(function(){
        if($(this).val()==num){ // EDITED THIS LINE
            $(this).attr("selected","selected");    
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

编辑

您可以通过在找到元素时添加return false;(break;对于vanilla循环)来优化循环,这样在我们已经"完成"时它不会保留循环元素.

但是,您应该看看Nicola Peluchetti的答案,以获得更高效,更清晰的代码.


Nic*_*tti 17

你有一个拼写错误,并将选项设置为你应该使用的选项prop()而不是attr().无论如何你可以做到

var num = 3;
$("div#selection select.select option[value="+num+"]").prop("selected", true);
Run Code Online (Sandbox Code Playgroud)

在这里摆弄http://jsfiddle.net/YRBrp/

编辑 - 错误当然是Tim S.指出的,你应该使用$(this).val()而不是(this).val()