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");
因此,所选元素应为two
,但正如您所见,它是one
。如何解决?
感谢。
答案 0 :(得分:2)
使用.prop('selected',true)
$("#my_select :contains('two')").first().prop("selected", true);
在.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);
答案 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为它。