1

次の手順を実行した後:Cookieの値に応じて$hold=$('<div>').load('page.php #somediv)呼び出されるHTML内の要素を削除しようとしています。removediv私はもう試した:

if ($.cookie('mycookie') !== null){
$hold=$hold.not('#removediv');
}else{
document.cookie = "mycookie=1;expires=Thu, 31 Dec 2020 23:59:59 UTC; path=/"
}
$('#divtwo').html($hold);

ただし、removedivCookieが設定されている場合でも、要素は常に表示されます。私も試しまし$hold.find('#removediv').remove()たが、うまくいきませんでした。

何か案は?

編集:$ hold htmlは次のようになります:

<div>
 <div id="somediv">
  <div id="removediv" class="stuff"></div>
  <div id="okdiv" class="stuff"></div>
  <div id="okdiv" class="stuff"></div>
  <div id="okdiv" class="stuff"></div>
 </div>
</div>
4

3 に答える 3

2

これが、これを機能させる方法についての私の最善の推測です。removehtmlフラグメントから削除し、メソッドremovedivの「完全な」コールバックにコードを配置するために使用します。load

$hold = $('<div>').load('page.php #somediv', function(response, status, xhr) {
    if ($.cookie('mycookie') !== null){
        $hold.find('#removediv').remove();
    } else {
        document.cookie = "mycookie=1;expires=Thu, 31 Dec 2020 23:59:59 UTC; path=/"
    }
    $('#divtwo').html($hold);
});
于 2013-03-17T23:16:57.837 に答える
0

このようなコールバック関数でそれをやってみてください

$('<div>').load('page.php #somediv', function(data) {
  $hold = data;

  if ($.cookie('mycookie') !== null){
    $hold.find('#removediv').remove();
   } else {
    document.cookie = "mycookie=1;expires=Thu, 31 Dec 2020 23:59:59 UTC; path=/"
   }
   $('#divtwo').html($hold);


});
于 2013-03-17T23:17:16.363 に答える
-1

これが、あなたの例ではうまくいかない理由です。

  • load()は非同期通話なので、通話が終了したときにのみ治療を続ける必要があります
  • $hold.find('#removediv').remove()divを選択するだけで、実際には削除しません

あなたが必要とするあなたのコードoの仕事のために、このようにcallbackとを利用するためにend

<script>
$(function() {
  $("#l").click(function() {

    var url = 'b.htm';

    $("#content").load(url + " #somediv", function(data) {

      var allHtml = $(data),
          newHtml = allHtml.find("#removediv").remove().end();

      console.log(newHtml.html());
    });

  });
});
</script>

このhtmlのファイルがあると仮定します。

<!DOCTYPE html>
<html>
<head>
  <meta charset=utf-8 />
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
  <title>Stackoverflow example</title>
</head>
<body>
  <h1>Hello</h1>

  <a href="#" id="l">load content</a>
  <div id="content">Empty</div>

</body>
</html>

b.htm持っています

<div>
 <div id="somediv">
  <div id="removediv" class="stuff">A</div>
  <div id="okdiv" class="stuff">B</div>
  <div id="okdiv" class="stuff">C</div>
  <div id="okdiv" class="stuff">D</div>
 </div>
</div>

出力は次のようになります(Firefoxでは、Chromeb.htmはローカルファイルであるため、クロスドメイン呼び出しとしての呼び出しをブロックします)

ここに画像の説明を入力してください

出力ショー:

console.log('data');
console.log(data);  
console.log('newHtml');
console.log(newHtml.html());

両方のファイルを表示する必要がある場合の例は、私のDropboxにあります。


独自のコードを使用する:

$(function() {

    $('<div/>').load('page.php #somediv', function(data) {

        // 'data' has the page.php #somediv part
        var allHtml = $(data);

        if ($.cookie('mycookie') !== null)
            allHtml = allHtml.find("#removediv").remove().end();
        else
            document.cookie = "mycookie=1;expires=Thu, 31 Dec 2020 23:59:59 UTC; path=/"

        $('#divtwo').html(allHtml);
    });
});
于 2013-03-17T23:18:09.060 に答える