2011-04-04 71 views
3

我想使用適當的選擇器代碼,但我似乎無法得到它的工作。jquery中有相鄰選擇器嗎?

<ul id="message-list"> 
    <li class="clearfix message success unread"> 
     <a href="/messages/mark_read/61/" class="message-close"></a> 
     <h4> 
      <strong> 
       Getting Real: The Smarter, Faster, Easier Way To Build A Successful Web Application 
      </strong> 
      has been added to your profile. 
     </h4> 
     <form action="/profile/tweet/NIZNQwAACAAJ/" method="post"> 
      <div style="display:none"> 
       <input type="hidden" value="3b723be17da67c5bc54b27a98a660d53" name="csrfmiddlewaretoken"> 
      </div> 
      <input type="submit" class="button tweet-button" value="Tweet This Book"> 
     </form> 
    </li> 
</ul> 


$('.tweet-button').click(function (e) { 
    var $list_item = $(this).parent('ul li.message'); < ----- ? ? ? 
    var $anchor = $(this).parent('a'); // ?? <------ 
}); 

我試圖獲得與一流的「消息」,毗鄰的形式錨標記最上面的列表項的選擇。

任何想法?

回答

4

由於li.message是不是你的按鈕的直接祖先,用.parents()直到你到達li.message搜索了DOM樹:

var $list_item = $(this).parents('li.message'); 

而且,由於錨的form父的兄弟您的輸入,使用.siblings()後選擇.parent()獲得錨:

var $anchor = $(this).parent().siblings('a'); 

順便提一下,

  • a是不鄰近form,雖然這是它的兄弟元素之一。

  • input直接嵌套在form中不是有效的HTML。 jQuery仍然可以使用它,但驗證器會抱怨(如果你關心這種事情)。

3

的另一種方法,使用.closest和使用.prev穿越到錨:

var $list_item = $(this).closest('li.message'); 
var $anchor = $(this).closest('form').prev().prev('.message-close');