-3
    jQuery.get("ajax.php", function(data)
    {
        $(data).find("div[id^='feed']").each(function() //Find every div with id starting with feed in AJAX response
            {
                $('#' + $(this).attr("id")).remove();
            });
        $("#newsfeed").prepend(data);
    });

これは、ajax 応答でこの説明に適合する一部の div で機能しますが、すべてではありません。前もって感謝します。

明確にするために、HTML の AJAX 要求を送信し、応答内のすべての div を反復処理したいと考えています。DOM に既にあるものと ID を共有していて、ID が「feed」で始まる場合は、それらを削除します。次に、AJAX をニュースフィードの先頭に追加します。以前に適切に説明していなかったら申し訳ありません。

4

2 に答える 2

0

問題は、jQuery("html snippet") コンストラクトで .find を使用できないことです。DOM 内のコンテナーに追加してから、不要な要素を削除する必要があります。例えば:

$('#newsfeed').prepend(data).find('div[id^=feed]').remove();

EDIT : ID が feed で始まる項目を応答でのみ削除するには:

$('<div class="moar_feed">' + data + '</div>') // create detached elements from the data response, wrapping them inside a <div with class="moar_feed" (arbitrary class name, not even necessary)
.appendTo('#newsfeed') // add the newly created HTML elements to the #newsfeed. the return value of appendTo is the HTML you just created, so you can now call .find() on it
.find('div[id^=feed]') // find the DIVs with id starting with "feed" inside the newly created elements
.remove() // remove them from the DOM
于 2012-05-28T04:46:37.723 に答える
0

問題はこの部分にあると思います:

$(data).find("div[id^='feed']")

html の文字列を jQuery に渡すと、jQuery は文字列に一致する DOM 要素を作成し (これらの要素は最初はドキュメントから切り離されます) 、最上位の要素のみ$(data)を含む jQuery オブジェクトを返します。つまり、文字列にネストされた要素が含まれている場合、すべての要素が作成されますが、最上位の要素のみが jQuery オブジェクトに返されます。

.find("div[id^='feed']")次に、前の手順で作成された jQuery オブジェクトの要素の子孫である div 要素を検索するため、トップレベルの要素と一致しません。

この.filter()メソッドを使用すると、トップレベルの要素をフィルター処理できるため、次のようにすることができます。

jQuery.get("ajax.php", function(data)
{
   var $newEls = $(data);

   $newEls.filter("div[id^='feed']")
          .add( $newEls.find("div[id^='feed']") )
          .each(function() {
       $('#' this.id).remove();
   });

   $("#newsfeed").prepend(data);
});

ではなく、内で.each()言うことができます。this.id$(this).attr("id")

HTML の例は、上記で説明しようとしたことを明確にするのに役立つ場合があります。与えられた:

data = "<div id='feed1'><div id='feed2'/><div id='xyz'/></div>
        <div id='abc'><div id='feed3'/></div>";

(読みやすさのためだけにある改行を無視します)

次に$(data)、5 つの div すべてを作成しますが、'feed1' および 'abc' div のみを含む jQuery オブジェクトを返します。

$(data).find("div[id^='feed']")'feed2' および 'feed3' div のみを含む jQuery オブジェクトを返します。これは、これらが$(data)jQuery オブジェクト内の要素の唯一の子孫であるためです。

$(data).filter("div[id^='feed']")'feed1' div のみを含む jQuery オブジェクトを返します。

編集:おそらく次のようなもので単純化できます:

jQuery.get("ajax.php", function(data)
{
   $("<div/>").append(data).find("div[id^='feed']").each(function() {
       $('#' this.id).remove();
   })
   $("#newsfeed").prepend(data);
});

これにより、完全に空の div がコンテナーとして作成されるため、.find()そのコンテナー内で使用して を廃止できます.filter()

于 2012-05-28T06:04:23.420 に答える