Вопрос по dom, jquery, javascript, html – Действительно ли функция удаления jQuery удаляет элементы Dom?

8

Мне действительно интересно, если JQueryУдалить Функция действительно удаляет элементы из DOM.
Сначала я посмотрелВот но ответы не убедительны.
Я столкнулся с этой проблемой, когда заметил, что все еще могу манипулировать элементами, для которых я вызвал функцию удаления.

Мой код:

<div id="container">
    <div id="div">
        This is a div
    </div>
</div>

var div = $('#div');
$('#div').remove();
$('#container').append(div);

Note: Мой вопрос неhow to solve this? но я хочу понять, что здесь происходит!

На самом деле, этот код не удаляет #div из домена, но если у меня есть какие-либоdata установите на #div, он будет потерян. Я довольно смущен сейчас о поведенииremove функция. Кто-нибудь может объяснить это, пожалуйста? DEMO

Я убежден, что переменная div - это не просто клон элемента dom, это ссылка на него, потому что, когда я манипулирую переменной div, (например,div.html('something'))div в DOM обновляются.
Или я не прав?

@Tats_innit Чувак, ты действительно думаешь, что я не читал это раньше? ilyes kooli
если что-то ссылается на этот объект (хранится в переменной), оно удаляется из DOM, но никогда не удаляется из памяти. Joseph
@skafandri: Естьmany люди, которые не читали бы это на вашем месте. Jon
@skafandri sup человек! просто комментарий, братан, нет пота! B-) Tats_innit
Да,api.jquery.com/remove Может разблокировать тайну :)) Tats_innit

Ваш Ответ

2   ответа
2

пришлось удалить назначенную переменную:

delete div;
14

remove() действительно удаляет элемент из DOM.

Однако в вашем примере элемент был кэширован в памяти, потому что вы присвоили егоdiv переменная. Поэтому вы все еще можете использовать его и добавить его снова, и он все равно будет содержать все события, которые сделал оригинал.

If what you say is right, why I loose the data bound to the div so?

Если вы проверитеисточник для удаления () вы увидите, что он вызывает внутреннийcleanData функция, которая удаляет события и очищаетdata кеш для элемента. Вот почему вы теряете информацию.

Если вы хотите удалить элемент из DOM, но оставить элементы, используйтеdetach() вместо.

Вот скрипка, чтобы показать разницу:http://jsfiddle.net/2VbmX/

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededdataError: User Rate Limit Exceeded ilyes kooli
Error: User Rate Limit ExceededremoveError: User Rate Limit Exceeded
Error: User Rate Limit ExceededdivError: User Rate Limit ExceededcloneError: User Rate Limit ExceededreferenceError: User Rate Limit ExceededdivError: User Rate Limit Exceeded ilyes kooli
Error: User Rate Limit Exceeded

Похожие вопросы