我知道有多种方法可以从使用jQuery中选择特定选项:
$select.val("someValue")
$option.attr("selected", "selected")
$select[0].selectedIndex = 1
假设你同时拥有你想要选择的选项的索引及其值,那么最合适的方法是什么(从上面或其他方面)选择它?
“最正确”,我的意思是:
答案 0 :(得分:3)
最常用的方式是$select.val("someValue")
,这是文档中用于设置任何输入值的官方方法,因此它将是最优化的方法,并且它们会影响性能区域。
对于#2,是的,它满足了这个,对于#3 ......它很短并且仍然使你的意图非常明确。
话虽如此,最快的方式,如果你设置了数千个选择元素是$select[0].selectedIndex = 1
路由......你不能比原生DOM属性更快。当设置值为1时(除非它有很多项目,在这种情况下再次使用.selectedIndex
),速度应该是到目前为止在三者之间无关紧要。
答案 1 :(得分:3)
$ select.val( “someValue中”)
这很好,在常见的情况下,它是非multiple
选择,并且您没有两个不同的<option>
具有相同的value
。如果是这种情况,我会选择这个,作为最可读的选项。
$ select [0] .selectedIndex = 1
这更直接,更快,并且对于具有相同值的多个选项的情况,必须明确无误。
如果您有multiple
- 选择,则必须单独获取/设置每个选项的选择性:
$select[0].options[1].selected= true;
然而:
$ option.attr(“已选中”,“已选中”)
通常不是最好的方法。 attr()
的问题是,访问DOM属性和HTML属性是一个讨厌的黑客,好像它们是同一个东西,试图隐藏与你的区别。在这种情况下attr()
将执行的操作是设置selected
DOM 属性,这是一个布尔值。所以attr('selected', true)
会更有意义; 'selected'
作为字符串值也可以,但只是因为JavaScript中的所有非空字符串值都是“真实的”。
如果您实际在此处设置HTML selected
属性,则不会对选项的选择性产生影响,因为selected
属性实际上映射到defaultSelected
属性而非selected
! selected
属性反映用户更改的运行时表单内容; defaultSelected
反映了包含初始选择状态的文档中的实际属性。
(除了在IE上,由于其默认值的实现存在错误,并且在某些情况下在其他浏览器中也太复杂且容易引起混淆。带回家的建议:不要尝试设置{{ 1}}来自脚本的HTML属性,因为结果可能无法预测。使用DOM属性。对于输入selected
/ value
和defaultValue
/ {{1}也是如此复选框/收音机。)
答案 2 :(得分:1)
正如尼克·克拉弗所提到的,任何这些都可行,这实际上取决于哪种情况最符合您的需求。
就个人而言,如果我需要速度,我只需使用类似的东西(未测试,只是一个例子):
var elem = document.getElementById('myselectid');
elem.options[1].value = 'some value'
但是,你这样做会失去jquery
的好处。
例如,如果您需要根据模式进行许多更改,那么您可以使用jquery来帮助解决这个问题,这将减少您需要编写的未经测试的代码量。有了一个很好的模式列表,你可以看看:http://www.myphpetc.com/2009/03/jquery-select-elements-tips-and-tricks.html。
所以,没有一种最好的方法在任何情况下都是最好的,这就是为什么有很多方法可以在option
元素中设置select
,但是,如果你给用户你正在做这个故事,然后可以解释一个特定的最佳实践。