给定一个 SELECT 元素:
<select>
<option>foo</option>
<option>bar</option>
<option>baz</option>
</select>
我想选择值为“bar”的 OPTION 元素。
这不起作用:
$('option[text="bar"]').attr('selected', true);
然而,这确实有效:
$('option:[text="bar"]').attr('selected', true);
Why?
现场演示:http://jsfiddle.net/YbfqZ/2/ http://jsfiddle.net/YbfqZ/2/
这种行为的原因是你的冒号破坏了选择器querySelectorAll
因为它无效。
因此,它默认为 Sizzle,它将容忍冒号,即使它在技术上不受支持(这意味着它将来可能会损坏)。 Sizzle 将检查属性和属性。因此,它不会找到text
属性,但它会找到text
的财产<option>
元素。
这是一个例子 http://jsfiddle.net/YbfqZ/5/这表明 Sizzle 将匹配一个属性,而不仅仅是一个属性与其attribute-equals
选择器。
示例中的代码:
// set a custom property on the last option
$('#id option').slice(-1)[0].customProp = 'customValue';
// breaking the selector with : we default to Sizzle,
// which matches our custom property
$('#id option:[customProp="customValue"]').attr('selected', true);
EDIT: 我的示例链接之前引用了其他人的示例,因为我输入了错误的修订号。固定的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)