-1

次の成功関数を使用した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()のドキュメントには、セレクターが含まれていないと記載されています。これは、テンプレートに1つしかない場合に表示thing in thingsされますが、複数ある場合は、両方のトップレベルのdivがループでアラートを受け取ります。

どうしたの?!

編集(より良い質問):2つあるときに両方のトップレベルのdivを取得するのに、1つしかないときに0を取得するのはなぜsiblings()ですか$(response)

何を選択しているのか誤解しているようです$(response)。誰でも明確にできますか?

4

1 に答える 1

1

「では、私が言うとき、私は何を選択しています $(response)か?」

これにより、文字列の最上位要素をすべて含む jQuery オブジェクトが得られますresponse。たとえば、最上位の要素が 3 つある場合は、 に$(response).lengthなります3

$(response).siblings()次に、すべてのトップレベル要素のすべての兄弟を提供します。それぞれが他の要素の兄弟であるため、これもすべてのトップレベル要素を返します。

最上位要素が 1 つしかない場合、兄弟要素はありません。

したがって、ここで使用するのは明らか.siblings()に間違った方法ですが、目的の結果がまだ不明であるため、代わりに何を使用するようアドバイスすればよいかわかりません。

以下を使用して、各最上位要素をループできます。

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

特定のものを取得するには.eq(someZeroBasedIndex)、たとえば、$(response).eq(1)2 番目を取得するために を使用できます。

最初のものを除くすべてを取得するには、 を使用できます$(response).slice(1)

于 2012-11-08T00:52:54.937 に答える