2013-03-17 2 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); 

Но removediv элемент всегда показывает вверх, даже если куки установлен. Я также пробовал $hold.find('#removediv').remove(), но это также не сработало.

Любые идеи?

EDIT: $ держать 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

Вы можете отобразить relavent HTML из page.php? Вы уверены, что идентификатор верен? И что он существует только один раз? –

+0

@ scott.korin Просто отредактировал этот вопрос с помощью html. – Phil

+0

'$ hold = $ hold.not ('# removediv');' не повлияет на DOM.Он просто создает новый набор результатов jQuery и сохраняет его в переменной с именем $ hold. – tcovo

ответ

2

Вот моя догадка, как сделать эту работу. Используйте remove для удаления removediv из фрагмента HTML, и поместить код в «полной» обратного вызова метода 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

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, на самом деле не удалить его

Для вашего кода изг вам нужно, чтобы использовать 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 в виде блоков 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

Смежные вопросы