如果有兄弟姐妹,则 jquery 兄弟姐妹()似乎包括选择器,但如果没有,则不包括
Posted
技术标签:
【中文标题】如果有兄弟姐妹,则 jquery 兄弟姐妹()似乎包括选择器,但如果没有,则不包括【英文标题】:jquery siblings() seems to include selector if there are siblings but not if not 【发布时间】:2012-10-28 03:43:14 【问题描述】:我有一个带有以下成功函数的 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 模板(稍微匿名)呈现响应的地方:
% 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 %
兄弟()的文档声明选择器不包括在内,如果我的模板中只有一个 thing in things
,我会看到这一点,但如果我有多个,我会收到两个*** div循环。
发生了什么事?!
编辑(更好的问题):当我在$(response)
上调用siblings()
时,为什么当有2 个时我得到两个***div,但当只有1 个时我得到0?
似乎我误解了我使用$(response)
选择的内容。谁能澄清一下?
【问题讨论】:
您期待什么?siblings
将抓取所有兄弟姐妹,但您可以使用 siblings('.class')
类过滤
很难追随你想要发生的事情
希望我的编辑得到澄清。我期待如果有两个*** div,当我要求 .siblings()
时我会得到一件事(因为大概$(response)
指向第一个,我会得到它唯一的兄弟)。然而,实际上,我得到了两件事。
@nnnnnn 这更接近我需要知道的。那么当我说$(response)
时,我在选择什么?
对不起,我删除了我的评论以使其成为答案。
【参考方案1】:
“那么当我说
$(response)
时我在选择什么?”
这为您提供了一个 jQuery 对象,其中包含您的response
字符串中的 所有 ***元素。如果有,比如说,三个***元素,那么$(response).length
将是3
。
$(response).siblings()
然后为您提供所有***元素的所有兄弟,并且因为每个都是其他元素的兄弟,这再次返回所有***元素。
如果只有一个***元素,则它没有兄弟姐妹。
所以显然.siblings()
是在这里使用的错误方法,但我不确定建议您改用什么方法,因为您想要的结果仍不清楚。
您可以通过以下方式遍历每个***元素:
$(response).each(function() ...
要获得一个特定的,您可以使用.eq(someZeroBasedIndex)
,例如,$(response).eq(1)
获得第二个。
要获取除第一个之外的所有内容,您可以使用$(response).slice(1)
。
【讨论】:
奇怪的是,当我有 2 个***的东西时,$(response).each()
给了我 3 个东西——我期望的两个 div 之间有一个“文本”节点。那是怎么回事?
源字符串的元素之间是否有文本?您可以使用 $(response).filter("div").each(...)
获取*** div。
这很奇怪,正如您从我的模板中看到的那样,元素之间没有文本。我试试过滤器,谢谢。
您之间确实有空格。但无论如何.filter()
应该可以解决问题。
啊,我以为所有的空格都会被折叠,不应该计算在内。很高兴知道。谢谢!以上是关于如果有兄弟姐妹,则 jquery 兄弟姐妹()似乎包括选择器,但如果没有,则不包括的主要内容,如果未能解决你的问题,请参考以下文章