使用html标签“选择”

时间:2013-08-21 13:08:16

标签: jquery

HTML:

<select id="my_select" name="my_select">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>

JS:

$("#my_select :contains('two')").first().attr("selected", "selected");

jsfiddle

因此,所选元素应为two,但正如您所见,它是one。如何解决?

感谢。

5 个答案:

答案 0 :(得分:2)

使用.prop('selected',true)

$("#my_select :contains('two')").first().prop("selected", true);

http://jsfiddle.net/6Pxz5/

.prop() docs声明

  
    应使用.prop()方法检索并设置

selectedIndex,tagName,nodeName,nodeType,ownerDocument,defaultChecked和defaultSelected。在jQuery 1.6之前,这些属性可以使用.attr()方法检索,但这不在attr的范围内。它们没有相应的属性,只是属性。

         

尽管如此,要记住关于checked属性的最重要的概念是它与checked属性不对应。该属性实际上对应于defaultChecked属性,应仅用于设置复选框的初始值。 checked属性值不会随复选框的状态而改变,而checked属性则会改变。因此,确定是否选中复选框的跨浏览器兼容方式是使用属性:

         

其他动态属性也是如此,例如selected和value。

  

答案 1 :(得分:2)

使用.prop()代替.attr()

$("#my_select :contains('two')").first().prop("selected", true);

答案 2 :(得分:1)

如果您在jsfiddle上设置No wrap - <in body>,那么您的演示有效...... http://jsfiddle.net/IrvinDominin/3M9cC/8/

更干净的解决方案是使用prop代替attr,我认为first在这种情况下没用,所以你可以省略它。

快速参考:

  

.prop()方法是设置值的便捷方法   属性 - 尤其是在使用值设置多个属性时   由函数返回,或在多个元素上设置值   一旦。设置selectedIndex,tagName,nodeName时应该使用它   nodeType,ownerDocument,defaultChecked或defaultSelected。以来   在jQuery 1.6中,无法再使用.attr()设置这些属性   方法。它们没有相应的属性,只是   属性。

     

属性通常会影响DOM元素的动态状态   更改序列化的HTML属性。例子包括价值   输入元素的属性,输入的禁用属性和   按钮,或复选框的选中属性。 .prop()方法   应该用来设置禁用和检查而不是.attr()   方法。应该使用.val()方法进行获取和设置   值。

代码:

$("#my_select :contains('two')").prop("selected", true);

演示:http://jsfiddle.net/IrvinDominin/3M9cC/5/

答案 3 :(得分:0)

var text1 = 'two';
$("select option").filter(function() {
    //may want to use $.trim in here
    return $(this).text() == text1; 
}).prop('selected', true);

答案 4 :(得分:0)

你可以设置它的值,而不是试图弄乱HTML'选中'标签:

if ($("#my_select :contains('two')").length > 0) {
    $("#my_select").val(2);
}

JSFiddle为它。