2012-11-08 163 views
-1

我有以下成功函數調用Ajax包括選擇:jQuery的兄弟姐妹()似乎如果有兄弟姐妹但如果不

  success: function(response){ 
       console.log($(response).siblings()); 
       $(response).siblings().each(function(){ 
        alert("foo"); 
        var thing_id = $(this).attr("id").split("-")[0]; 
        alert(thing_id); 
        $("#"+thing_id).append(this); 
       }) 

其中響應使用此Django的模板呈現的HTML(略匿名) :該選擇不包括在內,這是我所看到的,如果我只有在我的模板一個thing in things,但如果我有一個以上的,我得到兩個頂級

{% for thing in things %} 
    <div id="{{ thing.something.id }}-pc"> 
     <div> 
      <span class="tablename">Something Else</span> 
      {% include '<some template>' with table=thing.something_else %} 
     </div> 

    </div> 
{% endfor %} 

的文檔的兄弟姐妹()狀態循環中提醒的div。

這是怎麼回事?編輯(更好的問題):爲什麼我有兩個頂級divs,當有2,但0時,只有1,當我打電話 siblings()

好像我誤解了什麼我與$(response)選擇。任何人都可以澄清?

+0

你期待什麼? 'siblings'將抓住所有的兄弟姐妹,但你可以用一個類'兄弟姐妹過濾(」一流)' – elclanrs

+0

很難跟着你想有發生 – charlietfl

+0

希望我的編輯澄清什麼。我期待如果有兩個頂級div,當我請求'.siblings()'時,我會得到一件事(因爲大概$(響應)指向第一個,我會得到它只是兄弟) 。但是,事實上,我有兩件事。 – Colleen

回答

1

「那我選擇當我說$(response)?」

這就給了你一個jQuery對象,其中包括頂級元素所有response字符串。如果有三個頂級元素,那麼$(response).length將是3

$(response).siblings()然後爲您提供所有頂級元素的所有兄弟,並且因爲每個兄弟都是其他的兄弟,它將再次返回所有頂級元素。

如果只有一個頂級元素,然後它有沒有兄弟姐妹。

因此很明顯.siblings()是在這裏使用的錯誤方法,但我不知道建議您使用什麼來代替,因爲您所需的結果仍不清楚。

您可以通過每個頂級元素循環使用:

$(response).each(function() {... 

爲了得到一個特定的一個,你可以使用.eq(someZeroBasedIndex),例如,$(response).eq(1)獲得第二。

要獲得所有除了第一個,你可以使用$(response).slice(1)

+0

奇怪的是,當我有2個頂級事物時,'$(response).each()'給了我3件事情 - 我期望兩個div之間有一個「text」節點。那是怎麼回事? – Colleen

+0

源字符串中的元素之間是否有文本?你可以用'$(response).filter(「div」)。each(...)'來獲得頂級div。 – nnnnnn

+0

這就是奇怪的事情,正如你從我的模板中看到的那樣,元素之間沒有文本。我會嘗試過濾器,謝謝。 – Colleen