如果您使用jQuery
find方法,它会遍历DOM
树并尝试找到正确的元素,同时考虑到其属性之一的值,并查看您的评论,我认为您担心性能。
关于迭代所有选项并检查 value 属性的第一个想法(谈到性能)比遍历DOM
树在其属性之一中寻找具有特定值的元素更好(查看此比较)。您需要知道较短的代码与较快的代码不同。
更快的解决方案是在开始时生成一个array
字符串,并在验证过程中搜索其中的正确值:
//---At the beginning of your application
let list = Array.prototype.map.call(document.getElementById("colours").options, (option) => option.value);
//---Later in your validation process
if (list.indexOf(value) < 0) {
//Invalid
}
另一个更快的解决方案是在开始时生成一个object
并将其用作哈希映射,在验证过程中检查其中的正确值:
//---At the beginning of your application
let hashmap = Array.prototype.reduce.call(document.getElementById("colours").options, (obj, option) => {
if (!obj[option.value]) { obj[option.value] = true; }
return obj;
}, {});
//---Later in your validation process
if (!hashmap[value]) {
//Invalid
}
在这里,您在measurethat中比较了四种方法:
1 - 你的第一个想法(遍历所有Datalist
选项)
2 - 使用jQuery
find 方法(@nsthethunderbolt 解决方案)
3 -在开头创建一个array
of并在验证过程中搜索值strings
Array
4 - 在开始时创建一个哈希映射并检查该值是否true
在验证过程中
https://www.measurethat.net/Benchmarks/Show/4430/0/search-an-option-inside-a-datalist