Как элемент доступен после метода .remove ()?

когда мы используем $("selector").remove()любой элемент, он немедленно удаляется и $("selector").remove()является синхронным методом, поэтому следующий оператор будет выполняться при удалении элемента. Но в моем случае элемент остается доступным после его удаления.

$("#click1").on("click", function() {
  $(this).remove();
  alert($(this).text());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="click1">
  click on me
</button>

Мой вопрос: если элемент удален (из dom) Как я могу получить к нему доступ $(this).text()? есть идеи?

ОБНОВИТЬ:

В любом другом случае, $ ( "# click1" ). on ( "click" , function () { $ ( this ). remove (); alert ( $ ( this ). text ()); }); $ ( "# click2" ). on ( "click" , function () { $ ( "# click1" ). remove (); alert ( $ ( "# click1" ). text ()); }) не происходит

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="click1">
  click on me
</button>
<button id="click2">
  click on me too
</button>
removeChild

Теперь вторая кнопка, немедленно удалите элемент и я больше не получаю доступ к элементу (даже не очень мало времени)

jquery,

2

Ответов: 2


4 принят

jQuery использует $("#click1")внутренне, и состояние документации

Удаленный дочерний узел все еще существует в памяти, но больше не является частью DOM.

... вы можете повторно использовать удаленный узел позже в своем коде,

... предполагая, что ваш код не сохранил никакой другой ссылки на узел в другом месте, он сразу станет непригодным и безвозвратным и обычно будет автоматически удален из памяти через короткое время.

В обработчике событий thisвсе еще ссылается на узел, поэтому он не удаляется из памяти и может использоваться до тех пор, пока у вас есть ссылка на узел

Когда вы снова .getElementByIdиспользуете jQuery для извлечения элемента из DOM, но он больше не находится в DOM, он был удален.$(this).remove(); alert($(this).text());


3

В общем, объекты существуют до тех пор, пока существует существующая ссылка на них.

В первом примере:

this

... у вас все еще есть ссылка на объект после его удаления (в this), поэтому объект все еще существует, и вы можете получить его текст (его дочерние узлы все еще существуют, потому что у них есть ссылки на них).

Во втором примере:

$("#click1").remove();
alert($("#click1").text());

.... после удаления из документа, вы пытаетесь найти его, посмотрев его в документе. Это больше не в документе, так что не удивительно, что вы его не найдете.

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