复杂的jquery选择器循环函数

时间:2011-08-29 06:53:25

标签: jquery jquery-selectors addclass

我需要在列表和列表项中找到具有特定ID的<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');
        } 
 });

我收到错误:object false没有方法'removeClass'。 想知道如何实现我想要做的事情......

3 个答案:

答案 0 :(得分:2)

您的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 :(得分:1)

我认为elementSelectionList选择应该是:

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

E.g。它应该以'#'开头。此外,如果您在#fields标记中包含javascript,请确保在<script> div / form(?)之后定义了javascript。

答案 2 :(得分:1)

.hasClass method返回一个布尔值,因此无法用于链接

由于您在上使用 .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');
    } 
});