如果有兄弟姐妹,则 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 兄弟姐妹()似乎包括选择器,但如果没有,则不包括的主要内容,如果未能解决你的问题,请参考以下文章

列表元素的以下兄弟姐妹

jQuery选择除self之外的所有兄弟姐妹和孩子

使用 jquery 切换兄弟姐妹

jQuery手风琴折叠兄弟姐妹

JQuery Tree Traversal:混合最近的和兄弟姐妹

徘徊在兄弟姐妹身上只会影响兄弟姐妹