2013-03-17 53 views
1

执行以下操作后:$hold=$('<div>').load('page.php #somediv)我试图删除该HTML中名为removediv的元素,具体取决于Cookie的值。我试过了:如何从Jquery对象中删除元素

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); 

但是即使设置了cookie,removediv元素也总是显示出来。我也试过$hold.find('#removediv').remove(),但那也没有奏效。

任何想法?

编辑:$保持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> 
+0

可以显示page.php文件的relavent HTML?你确定这个ID是正确的吗?而且它只存在一次? – 2013-03-17 22:52:37

+0

@ scott.korin刚刚用html编辑过这个问题。 – Phil 2013-03-17 22:53:59

+0

'$ hold = $ hold.not('#removediv');'不会影响DOM。它只是创建一个新的jQuery结果集并将其存储在名为$ hold的变量中。 – tcovo 2013-03-17 22:54:35

回答

2

下面是如何使这项工作我最好的猜测。使用remove从HTML片段删除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); 
}); 
+0

tcovo,异步请求的确是问题,我按照你的指示解决了它。谢谢! – Phil 2013-03-18 20:25:51

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); 


}); 
0

回调函数这就是为什么事情不适用你的例子:

  • load()是一个异步调用,所以你需要继续你的治疗只有当通话结束
  • $hold.find('#removediv').remove()只会选择div,没有真正消除它

因为你需要你的代码Ø工作,利用callbackend的,就像这样:

<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浏览器的Chrome块作为一个跨域调用呼吁b.htm因为它是一个本地文件)

enter image description here

输出显示:

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

Example is on my 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); 
    }); 
}); 
+0

下载我暴露的文件,然后尝试一下,如果你确定自己:) – balexandre 2013-03-18 02:10:23