Я хочу отключить кнопку, если какой-либо текст был найден в любом ярлыке

Я хочу отключить кнопку, если какой-либо текст был найден в любом ярлыке. Следующий код не запускается, потому что 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;
    });
});

FIDDLE

Поскольку вы уже используете 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)
Другие вопросы по тегам