2010-06-17 99 views
1

我有一個表情選擇器,當用戶點擊日記中的條目時打開。我工作的方式是表情選擇器面板隱藏在頁面頂部。當用戶點擊與條目相關的「表情控件」時,我使用JavaScript從頁面頂部抓取表情選擇器面板的HTML並將其插入條目旁邊。jQuery選擇器 - 父母問題

使用Firebug,下面是成品在頁面中的樣子(從元素檢查中摘錄)。我試圖獲得的類,它包含的條目ID「表情控制容器」的ID:

<td> 
    <div id="1467002" class="emote-select emote-default">&nbsp;</div> 
    <div class="emote-control-container" id="emote-controls-1467002"> 
    <div id="emote-control-selector"> 
     <div id="emote-control-selector-body"> 
      <ul> 
       <li id="emote-1"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li> 
       <li id="emote-2"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li> 
       <li id="emote-3"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li> 
       <li id="emote-4"><img src="/images/default_emote.gif?1276134900" class="emote-image" alt="Default_emote"></li> 
      </ul> 
     </div> 
     <div id="emote-control-selector-footer"> 
      &nbsp; 
     </div> 
    </div> 
</div> 
        </td> 

我需要用表情ID一起條目ID,當用戶通過AJAX作出後通過點擊選擇器面板選擇一個表情符號。

我能夠拿到表情ID只是這很好,我現在使用提醒出選定的表情ID其中:

jQuery('li').live('click', function(e) { 
    e.preventDefault; 
    var emoteId = this.id; 
    alert(emoteId); 
    }); 

我無法向上遍歷DOM得到來自'.emote-control-container'的元素ID。

我都試過了,但是我希望這個工作,但它並不:

jQuery('li').live('click', function(e) { 
    e.preventDefault; 
    var entryId = jQuery(this.id).parent(".emote-control-container").attr("id"); 
    alert(entryId); 
    }); 

我在做什麼錯?我無法定位.emote-control-container的ID。

回答

1

你要.closest()這裏,像這樣:

jQuery('li').live('click', function(e) { 
    e.preventDefault; 
    var entryId = jQuery(this).closest(".emote-control-container").attr("id"); 
    alert(entryId); 
}); 

.parent(selector)通話只有它選擇匹配得到直接,它不會繼續下去,直到它找到它(這有點反直覺)。 .closest(selector)確實爬,直到它匹配選擇器,這就是你所追求的。

+0

真棒尼克,謝謝!這就像一個魅力,我曾在我的無數次試驗中嘗試過最接近的(),但顯然沒有得到正確的結果。太棒了。 – aressidi 2010-06-17 02:41:12