在框中选择选项的最正确方法

我知道有多种方法可以从使用jQuery中选择一个特定的选项:

  1. $select.val("someValue")
  2. $option.attr("selected", "selected")
  3. $select[0].selectedIndex = 1

假设您同时拥有要选择的选项的索引及其值,那么选择哪种方式(从上面或其他方面)最正确的方法是什么?

“最正确”,我的意思是:

  1. 最佳实践,如果有的话
  2. 将正确设置值以便与表单一起提交,并可以使用上述任何方法检索
  3. 我选择一种方法而不是其他方法的任何其他原因

$ select.val( “someValue中”)

这很好,在常见的情况下,它是非multiple选择,并且您没有两个具有相同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中的所有非空字符串值都是’truthy’。

如果您实际上在此处设置了HTML selected属性,则它不会对选项的选择性产生影响,因为selected 属性实际上映射到defaultSelected属性而未被selectedselected属性反映用户更改的运行时表单内容; defaultSelected反映包含初始选择状态的文档中的实际属性。

(除了在IE上,由于其默认值的实现存在错误,并且在某些情况下在其他浏览器中也太复杂且容易引起混淆。回家建议:不要尝试从脚本中设置selected HTML属性因为结果可能是不可预测的。使用DOM属性。对于输入的value / defaultValue也是如此,对于checkbox / radio, checked / defaultChecked也是如此。)

最常用的方式是$select.val("someValue") ,这是文档中用于设置任何输入值的官方方法,因此它将是最优化的方法,并且它们会达到性能区域。

对于#2,是的,它满足于此,对于#3 ……它很短并且仍然使你的意图非常明确。

话虽这么说, 最快的方法,如果你设置成千上万的选择元素是$select[0].selectedIndex = 1路由……你不能比本机DOM属性更快。 当设置值为1时(除非它有很多项目,在这种情况下再次使用.selectedIndex ),速度应该是到目前为止,它们之间的任何一个都无关紧要。

正如尼克克拉弗所提到的那样,任何这些都可行,它实际上取决于哪种情况最适合您的需求。

就个人而言,如果我需要速度,我只需使用类似的东西(未测试,只是一个例子):

 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 。

因此,没有一种最好的方法在任何情况下都是最好的,这就是为什么有很多方法optionselect元素中设置一个option ,但是,如果你给用户讲述你正在做的事情,那么一个特定的最佳方法练习可以解释。