JavaScript,2022 年
您可以在 2022 年使用生成的 NodeList 中的 querySelectorAll 和 forEach 更轻松地完成相同的操作。
document.querySelectorAll("#foo option").forEach(opt => {
if (opt.value == "StackOverflow") {
opt.disabled = true;
}
});
不过,请注意字符串比较。 'StackOverflow' 和 'stackoverflow' 不是同一个字符串。因此,您可以在比较之前对字符串调用 .toLowerCase(),甚至可以使用不区分大小写的正则表达式比较,如下所示:
if ( /^stackoverflow$/i.test(option.value) ) {
option.disabled = true;
}
纯 Javascript (2010)
使用纯 Javascript,您必须循环浏览每个选项,并单独检查它的值。
// Get all options within <select id='foo'>...</select>
var op = document.getElementById("foo").getElementsByTagName("option");
for (var i = 0; i < op.length; i++) {
// lowercase comparison for case-insensitivity
(op[i].value.toLowerCase() == "stackoverflow")
? op[i].disabled = true
: op[i].disabled = false ;
}
不启用非目标元素:
// Get all options within <select id='foo'>...</select>
var op = document.getElementById("foo").getElementsByTagName("option");
for (var i = 0; i < op.length; i++) {
// lowercase comparison for case-insensitivity
if (op[i].value.toLowerCase() == "stackoverflow") {
op[i].disabled = true;
}
}
###jQuery
使用 jQuery,您可以用一行代码完成:
$("option[value='stackoverflow']")
.attr("disabled", "disabled")
.siblings().removeAttr("disabled");
不启用非目标元素:
$("option[value='stackoverflow']").attr("disabled", "disabled");
请注意,此 不是 不区分大小写的。 “StackOverflow”将不等于“stackoverflow”。要获得不区分大小写的匹配,您必须循环遍历每个,将值转换为小写,然后检查:
$("option").each(function(){
if ($(this).val().toLowerCase() == "stackoverflow") {
$(this).attr("disabled", "disabled").siblings().removeAttr("disabled");
}
});
不启用非目标元素:
$("option").each(function(){
if ($(this).val().toLowerCase() == "stackoverflow") {
$(this).attr("disabled", "disabled");
}
});