我有一个带有以下成功函数的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)
选择的内容。任何人都可以澄清吗?
答案 0 :(得分:1)
“那么当我说
$(response)
时,我选择了什么?”
它为您提供了一个jQuery对象,其中包含response
字符串中所有的顶级元素。如果有三个顶级元素,则$(response).length
将为3
。
$(response).siblings()
会给你所有顶级元素的兄弟姐妹,因为每个元素都是其他元素的兄弟,这又会返回所有顶级元素。
如果只有一个顶级元素,则它没有兄弟姐妹。
所以很明显.siblings()
是在这里使用的错误方法,但我不确定建议你使用什么,因为你想要的结果仍然不清楚。
您可以使用以下内容遍历每个顶级元素:
$(response).each(function() {...
要获取特定的一个,您可以使用.eq(someZeroBasedIndex)
,例如$(response).eq(1)
来获取第二个。
除了第一个之外,你可以使用$(response).slice(1)
。