Я хочу отключить кнопку, если какой-либо текст был найден в любом ярлыке
Я хочу отключить кнопку, если какой-либо текст был найден в любом ярлыке. Следующий код не запускается, потому что aTags[i].innerText
не всегда равен searchText, что неверно, поскольку метка имеет внутренний текст = "a", а переменная searchText имеет текст "a" - мне нужно, чтобы он работал в IE
<html>
<script language="javascript">
$(document).ready(function () {
var aTags = document.getElementsByTagName("label");
var searchText = "a";
var found;
for (var i = 0; i < aTags.length; i++) {
if (aTags[i].innerText == searchText) {
document.getElementById('choose').disabled=true;
break;
}
else
{
alert("failed")
}
}
});
</script>
<label> a </label> <br/>
<label> b </label> <br/>
<label> c </label> <br/>
<input type='button' value='choose' id='choose' />
</html>
5 ответов
Похоже, должны быть более простые способы сделать это с помощью jQuery
$(function () {
var searchText = "a";
$('#choose').prop('disabled', function() {
return $('label').filter(function(_,el) {
return $.trim( $(el).text() ) === searchText;
}).length > 0;
});
});
Поскольку вы уже используете jQuery, вы можете делать то, что вам нравится, с гораздо меньшей сложностью. Это будет работать:
(function ($) {
var searchText = "a";
$('label').each(function(){
if ($.trim($(this).text()) === searchText) {
$('#choose').prop('disabled', true);
}
});
})(jQuery);
Проблема в том, что ваш ярлык содержит " a "
(с пробелами), но вы сравниваете с "a"
(без пробелов).
Если вы хотите игнорировать пробелы, вы можете использовать jQuery's $.trim(...)
обрезать текст от innerText
,
Но так как вы используете jQuery, вы можете значительно сократить этот код:
$(document).ready(function() {
var searchText = "a";
var found = false;
$("label").each(function() {
found = $.trim($(this).text()) === searchText;
if (found) {
return false; // No need to keep looking
}
});
$("#choose").prop("disabled", true);
});
Если вы хотите сопоставить, если подстрока существует, вы можете попробовать с
aTags[i].innerText.indexOf(searchText) > -1
вместо
aTags[i].innerText == searchText
Вы должны обрезать текст метки. Попробуйте с:
if (aTags[i].innerText.trim() == searchText)
или без trim
метод:
if (aTags[i].innerText.replace(/^\s+|\s+$/g, '') == searchText)