jquery siblings()似乎包含选择器,如果有兄弟姐妹,但如果没有

时间:2012-11-08 00:29:39

标签: javascript jquery html ajax django-templates

我有一个带有以下成功函数的ajax调用:

            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呈现响应:

{% 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 %}

sibling()的文档声明选择器不包含在内,如果我的模板中只有一个thing in things,我会看到,但如果我有多个,我会得到两个顶级div在循环中发出警报。

发生了什么?!

编辑(更好的问题):为什么我在有2时会得到两个顶级div,但在只有1时得到0,当我在siblings()上呼叫$(response)时?

似乎我误解了我用$(response)选择的内容。任何人都可以澄清吗?

1 个答案:

答案 0 :(得分:1)

  

“那么当我说 $(response)时,我选择了什么?”

它为您提供了一个jQuery对象,其中包含response字符串中所有的顶级元素。如果有三个顶级元素,则$(response).length将为3

然后

$(response).siblings()会给你所有顶级元素的兄弟姐妹,因为每个元素都是其他元素的兄弟,这又会返回所有顶级元素。

如果只有一个顶级元素,则它没有兄弟姐妹。

所以很明显.siblings()是在这里使用的错误方法,但我不确定建议你使用什么,因为你想要的结果仍然不清楚。

您可以使用以下内容遍历每个顶级元素:

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

要获取特定的一个,您可以使用.eq(someZeroBasedIndex),例如$(response).eq(1)来获取第二个。

除了第一个之外,你可以使用$(response).slice(1)