2010-11-04 44 views
5

我有一個返回HTML片段的ajax調用。我正在嘗試在渲染之前在該片段中選擇一個div。可能的JQuery類選擇器錯誤

的HTML的一個例子:

<div class="event-detail repBy-container"> 
    <div class="copy">.....</div> 
    <div class="links"> 
     .... 
    </div> 
    <div class="contacts"> 
     <div class="name-brand">....</div><div class="details">...., <a href="mailto:[email protected]">...</a></div> 
    </div> 
</div> 

現在的問題:

function ajaxReturn(data) { 
    alert($(data).find('.event-detail').length); <-- Returns 0 
    alert($(data).find('.copy').length); <-- Returns 1 
} 

這是一個錯誤還是我做錯了什麼?

回答

5

.find()得到後裔而已,不會從目前的水平,你需要.filter()擺脫當前組項目(這是你返回哪根),像這樣:

function ajaxReturn(data) { 
    alert($(data).filter('.event-detail').length); //<-- Returns 1 
    alert($(data).find('.copy').length); //<-- Returns 1 
} 

如果你想.find()在這兩種情況下工作,內容添加到父容器,如:

function ajaxReturn(data) { 
    var parent = $("<div />").append(data); 
    alert(parent.filter('.event-detail').length); //<-- Returns 1 
    alert(parent.find('.copy').length); //<-- Returns 1 
} 
+0

謝謝你,這使我瘋了 – Magpie 2010-11-04 17:00:19

5

這是預期的行爲。

  • 您正在尋找.event-detail下你的div和沒有任何。
  • 您正在搜索.copy下你的div和有一個。
0

這取決於什麼是被傳入ajaxReturn函數。即data包含什麼?

如果它包含您引用的HTML,那麼這是預期的行爲。這是因爲.find()方法在內搜索當前上下文,不包括它。如果您示例中的外部div是data中的外部div,那麼.find()將在該div的內搜索.event-detail