Сложная функция цикла селектора jquery - PullRequest
0 голосов
/ 29 августа 2011

Мне нужно найти в списке и элементе списка с конкретным идентификатором <a> с href, равным переменной <li> (и затем добавить к нему определенный класс).

<ul id="elementSelectionList">
   <li><a href="#bzm_tagline" class="text">Tagline</a></li>
</ul>

<input id="form_tagline" name="tagline" value="">

.

 $('#fields input').each(function (){
        var elementListing = this.id.replace('form', 'bzm');

        if( !$(this).val() ) {
            $('#elementSelectionList li a[href*="#' + elementListing + '"]')
                .hasClass('text')
                .removeClass('filled')
                .addClass('empty');
        } 
 });

Я получаю сообщение об ошибке: объект false не имеет метода removeClass.Хотите знать, как я могу достичь того, что я пытаюсь сделать ...

Ответы [ 3 ]

2 голосов
/ 29 августа 2011

Ваш JS немного неверен. Вот что выглядит лучше:

$('#fields input').each(function (){
       var elementListing = this.id.replace('form', 'bzm');
       var element = $('#elementSelectionList li a[href="#' + elementListing + '"]');

       if( !$(this).val() && element.hasClass('text') ) {
           element
               .removeClass('filled')
               .addClass('empty');
       } 
});

hasClass, естественно, возвращает boolean, а не jQuery object

1 голос
/ 29 августа 2011

Метод .hasClass возвращает логическое значение и, таким образом, недоступен для создания цепочки .

Поскольку вы, похоже, делаете .removeClass('filled').addClass('empty') для элементов с классом .text, вы можете просто добавить это к селектору:

$('#fields input').each(function (){
    var elementListing = this.id.replace('form', 'bzm');

    if( !$(this).val() ) {
        $('#elementSelectionList li a.text[href*="#' + elementListing + '"]') // Added .text here!
            .removeClass('filled')
            .addClass('empty');
    } 
});
1 голос
/ 29 августа 2011

Я думаю, что выбор elementSelectionList должен быть:

$('#elementSelectionList li a[href*="#' + elementListing + '"]')

Например, он должен начинаться с '#'.Также убедитесь, что javascript определен после #fields div / form (?), Если вы включили его в теги <script>.

...