Javascript 选择框中选项的最正确方式
我知道有多种方法可以使用jQuery从数据库中选择特定选项: $select.valsomeValue $option.attrselected,selected $select[0]。selectedIndex=1 假设你有你希望被选择的选项的索引和它的值,那么从上面看,最正确的方法是什么,或者以其他方式选择它 最正确的说法是: 最佳做法(如有) 将正确设置该值,以便与表单一起提交,并且可以使用上述任何方法检索该值 我选择一种方法而不是其他方法的任何其他原因 最常用的方法是$select.valsomeValue,这是文档中用于设置任何输入值的官方方法,因此它将是最优化的方法,并且会影响性能区域 对于2,是的,它满足了这一点,对于3…它很短,仍然使你的意图非常明确Javascript 选择框中选项的最正确方式,javascript,jquery,forms,select,Javascript,Jquery,Forms,Select,我知道有多种方法可以使用jQuery从数据库中选择特定选项: $select.valsomeValue $option.attrselected,selected $select[0]。selectedIndex=1 假设你有你希望被选择的选项的索引和它的值,那么从上面看,最正确的方法是什么,或者以其他方式选择它 最正确的说法是: 最佳做法(如有) 将正确设置该值,以便与表单一起提交,并且可以使用上述任何方法检索该值 我选择一种方法而不是其他方法的任何其他原因 最常用的方法是$select.va
也就是说,如果要设置数千个select元素,最快的方法是$select[0]。selectedIndex=1路由…您无法获得比本机DOM属性更快的速度。但当设置一的值时,除非它有很多项目,否则在这种情况下,再次使用。selectedIndex速度应该在三者中的任何一个之间都没有关系。正如Nick Craver所提到的,这些都会起作用,这实际上取决于上下文,哪一个最适合您的需要 就个人而言,如果我需要速度,我只需要使用一些类似“未测试”的东西,举个例子:
var elem = document.getElementById('myselectid');
elem.options[1].value = 'some value'
但是,这样做会失去jquery的好处
例如,如果您需要基于一个模式进行许多更改,那么您可以使用jquery来帮助进行更改,这将减少您需要编写的未测试代码的数量。要查看您可以执行的模式列表,请查看以下内容:
因此,在任何情况下都没有最好的方法,这就是为什么有这么多方法可以在选择元素中设置选项的原因,但是,如果您给出一个用户故事,说明您在哪里这样做,那么可以解释一个特定的最佳实践
$select.valsomeValue
这很好,在通常的情况下,它是一个非多重选择,并且没有两个具有相同值的不同s。如果是这样的话,我会选择这个,作为最具可读性的选项
$select[0]。selectedIndex=1
这更直接,所以速度稍微快一点,对于有多个相同值的选项的情况,这是必须明确的
如果您可能有多选功能,则必须分别获取/设置每个选项的可选择性:
$select[0].options[1].selected= true;
然而:
$option.attrselected,selected
通常不是最好的方法。attr的问题是,访问DOM属性和HTML属性就像它们是同一件事一样,试图向您隐藏它们之间的差异,这是一种令人讨厌的黑客行为。attr在这种情况下要做的是设置选定的DOM属性,它是一个布尔值。所以attr'selected',true更有意义;'“selected”作为字符串值也可以使用,但这只是因为所有非空字符串值在JavaScript中都是“truthy”
如果您在此处实际设置HTML selected属性,则不会影响选项的可选择性,因为所选属性实际上映射到defaultSelected属性而不是selected!所选属性反映用户更改的运行时表单内容;defaultSelected反映包含初始Selecteds状态的文档中的实际属性
除了在IE上,由于默认值的实现存在缺陷,在其他浏览器中也存在一些情况,这些情况过于复杂和混乱,无法深入研究。带回家的建议:不要尝试从脚本设置选定的HTML属性,因为结果可能不可预测。使用DOM属性。输入的value/defaultValue和checkbox/radio的checked/defaultChecked也是如此