5

これはおそらく簡単ですが、答えが見つからないようです...

HTMLを返すajax呼び出しがあります

 dataType: "html"

'msg' は次のように返されます。

<div id="x"><p>Hello</p></div>

そして、それは親 div の上部に dom 追加されます:

ajax call...
request.done(function(msg) {
   $('#parent').prepend(msg);
}

問題は、テキストが変更されていない場合、この dom 操作を実行したくないということです (切り捨てた他の効果が発生するため) (これは、一定間隔で更新をチェックする通知表示です)

だから、私がやりたいことは、msg 内で "Hello" を見つけて、それを現在の div x の p と比較することです。この 2 番目の部分は簡単に対処できますが、最初の部分では、"Hello" を取得するために msg.text() のようなことをする必要がありますが、試したいくつかのバリエーションは失敗しました。

ポインタ?

4

5 に答える 5

2

filter()テキストを検索するために使用します。

これを試して

$(msg).filter('div#x p').text(); //this  will give you hello

またfind()

 $(msg).find('div#x p').text();
于 2013-03-28T18:14:38.563 に答える
1

したがって、次のことができます。

前のクエリのテキストを変数に保持する

var previusData;

次に、最初のリクエストでそのデータを変数に追加した後、フィルターを使用するか、次のようにしてこれを行うことができます。

previusData = $("#x p").html();

次に、それをDOMに追加する前に、新しい変数を追加してチェックを行います

request.done(function(msg) {
   var currData = $("#x p").html();
   if(currData != previusData){
     $('#parent').prepend(msg);
   }
}
于 2013-03-28T18:19:28.847 に答える
1

「通知」がページの読み込み時に存在せず、ページの読み込み後にフェッチされると仮定すると、グローバル変数 (または名前空間) を使用して応答の以前の値を保持し、新しい応答を受信するたびに一致させることができます。すでに保存されている応答に対して。変更されていない場合は破棄します。または if changed を使用してグローバル変数を更新します

var cached_response = '';
ajax call...
request.done(function(msg) {
   if(msg != cached_response){
      $('#parent').prepend(msg);
      cached_response = msg;
   }
}
于 2013-03-28T18:20:39.027 に答える
1

1 つの方法として、次のようにすべての html タグを置き換える正規表現形式を使用できます。

$(document).ready(function() {
    var text = '<div id="x"><p>Hello</p></div>';
    console.log(text.replace(/(<([^>]+)>)/ig,""));
});

この行をスクリプトに追加して、データと比較してください。

これが実際の例です: http://jsfiddle.net/cGnG5/1/

別の方法は、別の回答で説明されているように.filter()関数を使用することです。

于 2013-03-28T18:22:34.393 に答える
0

これを試して

$('#parent').prepend($(msg).text());
于 2013-03-28T18:19:17.850 に答える