【问题标题】:jquery siblings() seems to include selector if there are siblings but not if not如果有兄弟姐妹,则 jquery 兄弟姐妹()似乎包括选择器,但如果没有,则不包括
【发布时间】: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) 时,我在选择什么?
  • 对不起,我删除了我的评论以使其成为答案。

标签: javascript jquery html ajax django-templates


【解决方案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() 应该可以解决问题。
  • 啊,我以为所有的空格都会被折叠,不应该计算在内。很高兴知道。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-22
  • 2019-05-06
相关资源
最近更新 更多