2011-08-29 53 views
0

我需要在列表中找到一個具有特定ID的<a>,其中href等於變量<li>(然後向它添加一個特定的類)。複雜的jquery選擇器循環功能

<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 has no method'removeClass'。 想知道我怎麼能acheive什麼,我試圖做...

回答

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

+0

謝謝。 jquery選擇器的鏈條在我看來往往隱含在if語句中,但我想我花了太多時間。 – Damon

1

我認爲elementSelectionList選擇應該是:

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

例如它應該以'#'開始。此外,請確保在#fields div/form(?)之後定義了javascript,如果將其包含在<script>標記中。

+0

你說得對!仍然不工作,雖然..我不知道我的'hasClass'使用是否正確.. – Damon

+0

啊,邁克爾薩加洛維奇解決了這個問題。 – Roy

1

.hasClass method返回布爾,因此不適用於鏈接

既然你似乎在做什麼是對元素.text.removeClass('filled').addClass('empty'),你可能也只是添加此的選擇:

$('#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'); 
    } 
}); 
+0

我真的想做類似'.hasClass('。text,.logo')'的東西,就像在jquery文檔的註釋中提到的那樣,但它不起作用 – Damon