2012-11-08 44 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