2013-08-21 59 views
0

HTML:与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。如何解决它?

谢谢。

+2

你为什么先打()? – Itay

+1

那个jsFiddle对我来说工作正常 - 加载时选择了两个选项。你使用的是什么浏览器? –

+1

FOR ME小提琴工作(最新firefox win7) –

回答

2

使用.prop('selected',true)

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

http://jsfiddle.net/6Pxz5/

.prop() docs它指出

的selectedIndex,标记名的nodeName,节点类型,ownerDocument,defaultChecked和defaultSelected应该检索和设置的使用.prop()方法。在jQuery 1.6之前,这些属性可以使用.attr()方法检索,但这不属于attr范围。这些没有相应的属性,只是属性。

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

对于其他动态属性(例如selected和value)也是如此。

+0

尽管prop()在支持它的版本中是首选,但最终结果将会是'selected =“”'vs'selected =“selected”'。这并不重要的是什么'selected'值是:http://jsfiddle.net/EQ8t8/这就是说,OP的代码应该工作,如果这个工作,反之亦然。 – Johan

+1

@Johan attr只设置默认开始 - 不是实际的属性 –

2

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

$("#my_select :contains('two')").first().prop("selected", true); 
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/

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

你可以只设置它的价值,而不是试图与HTML '选择' 的标签混乱:

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

A JSFiddle