У меня есть a <select>
со многими <option>
s. У каждого есть уникальное значение. Я должен отключить <option>
с данным определенным значением (не innerhtml).
У кого-либо есть идея как?
с чистым 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 вы можете сделать это с одной строкой:
$("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");
}
});