0

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. 如何解决?

谢谢。

4

5 回答 5

2

利用.prop('selected',true)

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

http://jsfiddle.net/6Pxz5/

.prop() 文档中它指出

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

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

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

于 2013-08-21T13:09:40.917 回答
2

使用 .prop() 而不是 .attr()

$("#my_select :contains('two')").first().prop("selected", true);
于 2013-08-21T13:09:56.313 回答
1

如果你No wrap - <in body>在 jsfiddle 上设置,你的演示就可以工作......:http: //jsfiddle.net/IrvinDominin/3M9cC/8/

一个更清洁的解决方案是使用prop而不是attr,我认为first在这种情况下是没用的,所以你可以省略它。

快速参考:

.prop() 方法是设置属性值的便捷​​方法——尤其是在设置多个属性、使用函数返回的值或同时设置多个元素的值时。在设置 selectedIndex、tagName、nodeName、nodeType、ownerDocument、defaultChecked 或 defaultSelected 时应使用它。从 jQuery 1.6 开始,这些属性不能再用 .attr() 方法设置。它们没有对应的属性,只是属性。

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

代码:

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

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

于 2013-08-21T13:15:27.273 回答
0
var text1 = 'two';
$("select option").filter(function() {
    //may want to use $.trim in here
    return $(this).text() == text1; 
}).prop('selected', true);
于 2013-08-21T13:15:33.063 回答
0

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

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

一个JSFiddle

于 2013-08-21T13:16:07.917 回答