Відмінності між detach (), hid () та remove () - jQuery


Відповіді:


151

hide()встановлює значення displayвластивості CSS відповідних елементів none.

remove() видаляє відповідні елементи з DOM повністю.

detach()схоже remove(), але зберігає збережені дані та події, пов’язані з відповідними елементами.

Щоб знову вставити відокремлений елемент у DOM, просто вставте повернений jQueryнабір із detach():

var span = $('span').detach();

...

span.appendTo('body');

7
У поєднанні з .clone (правда) ви можете використовувати відрив для дешевих шаблонів, що дозволяє уникнути jquery прямих подій: jsfiddle.net/b9chris/PNd2t
Кріс

Я досі не бачу різниці. Якщо я використовую removeзамість цього detach, приклад все одно працює.
comecme

12
@comecme: Якщо ви прив'язали подію, як обробник кліків, до інтервалу, зателефонуйте remove()та приєднайте її знову, прив’язка буде відсутня, а натискання на проміжок нічого не призведе. Якщо ви зателефонували detach()і повторно встановите зв'язок, прив'язка залишається і обробник кліків продовжує працювати.
лямбханксі

@ Відповідь Кумара є більш правильною щодо видалення (), оскільки він не видалений з DOM. Це має наслідки, оскільки складні елементи з пов'язаними подіями, як правило, з'їдають багато пам’яті браузера, якщо їх не пережовує сміттєзбірник досить швидко. Хитрість швидше звільнити пам'ять - $ (element) .html (''). Remove ();
oskarth

create () встановлює значення властивості відображення відповідних елементів CSS на жодне. Це означає: Чи можете ви описати мені різницю між hid () та дисплеєм: none.
Кріш

50

Уявіть на столі аркуш паперу з деякими записками, написаними олівцем.

  • hide -> накиньте на нього одяг
  • empty -> видаліть замітки гумкою
  • detach -> візьміть папір в руку і потримайте її там, де б не було планів на майбутнє
  • remove -> візьміть папір і киньте його на смітник

Папір представляє елемент, а примітки - вміст (дочірні вузли) елемента.

Трохи спрощений і не зовсім точний, але легкий для розуміння.


14

hide() встановлює режим відображення відповідного елемента.

detach() видаляє відповідні елементи, включаючи всі текстові та дочірні вузли.

Цей метод зберігає всі дані, пов'язані з елементом, і тому їх можна використовувати для відновлення даних елемента, а також обробників подій.

remove() також видаляє відповідні елементи, включаючи всі текстові та дочірні вузли.

Однак у цьому випадку можна відновити лише дані елемента, а не його обробники подій не можуть.


11

У jQuery є три методи видалення елементів з DOM. Ці три методи .empty(), .remove()і .detach(). Усі ці методи використовуються для видалення елементів з DOM, але всі вони різні.

.hide ()

Сховати відповідні елементи. Без параметрів метод .hide () є найпростішим способом приховання елемента HTML:

$(".box").hide();

.empty ()

Метод .empty () видаляє всі дочірні вузли та вміст із вибраних елементів. Цей метод не видаляє сам елемент або його атрибути.

Примітка

Метод .empty () не приймає жодного аргументу, щоб уникнути витоку пам'яті. jQuery видаляє інші добудови, такі як обробники даних та подій, з дочірніх елементів, перш ніж видаляти самі елементи.

Приклад

<div class="content">
<div class="hai">Hai</div>
<div class="goodevening">good evening</div>
</div>
<script>
    $("div.hai").empty();
</script>

Це призведе до структури DOM із видаленим текстом Hai:

<div class="content">
<div class="hai"></div>
<div class="goodevening">good evening</div>
</div>

Якби у нас була будь-яка кількість вкладених елементів <div class="hai">, вони також були б видалені.

.remove ()

Метод .remove () видаляє вибрані елементи, включаючи всі текстові та дочірні вузли. Цей метод також видаляє дані та події вибраних елементів.

Примітка

Використовуйте .remove (), коли ви хочете видалити сам елемент, а також все, що знаходиться всередині нього. Крім цього, всі пов'язані події та дані jQuery, пов'язані з елементами, видаляються.

ПРИКЛАД

Розглянемо наступний html:

<div class="content">
<div class="hai">Hai</div>
<div class="goodevening">good evening</div>
</div>
<script>
    $("div.hai").remove();
</script>

Це призведе до структури DOM з <div>видаленим елементом:

<div class="content">
<div class="goodevening">good evening</div>
</div

Якби у нас була будь-яка кількість вкладених елементів <div class="hai">, вони також були б видалені. Інші конструкції jQuery, такі як обробники даних або події, також стираються.

.detach ()

Метод .detach () видаляє вибрані елементи, включаючи всі текстові та дочірні вузли. Однак він зберігає дані та події. Цей метод також зберігає копію видалених елементів, що дозволяє їх повторно вставити.

Примітка

Метод .detach () корисний, коли вилучені елементи потрібно буде знову вставити в DOM.

Приклад

<!doctype html>
<html>
<head>

<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<p>Hai!</p>Good <p>Afternoo</p>
<button>Attach/detach paragraphs</button>
<script>
$( "p" ).click(function() {
$( this ).toggleClass( "off" );
});
var p;
$( "button" ).click(function() {
if ( p ) {
p.appendTo( "body" );
p = null;
} else {
p = $( "p" ).detach();
}
});
</script>
</body>
</html>

Для отримання додаткової інформації відвідайте: http://www.scriptcafe.in/2014/03/what-is-difference-between-jquery_15.html


0
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
</head>
<body>
    <script>
        $(document).ready(function(){
            var $span;
            $span = $("<span>");
            $span.text("Ngoc Xuan");
            function addEvent() {
                $span.on("click",function(){
                    alert("I'm Span");
                });
            }
            function addSpan() {

                $span.appendTo("body");
            }
           function addButton(name) {
               var $btn = $("<input>");
               $btn.attr({value:name,
                       type:'submit'});
               if(name=="remove"){
                   $btn.on("click",function(){
                       $("body").find("span").remove();
                   })
               }else if(name=="detach"){
                   $btn.on("click",function(){
                       $("body").find("span").detach();
                   })
               }else if(name=="Add") {
                   $btn.on("click",function(){
                       addSpan();
                   })
               }else if(name=="Event"){
                   $btn.on("click",function(){
                       addEvent();
                   })
               }else if (name == "Hide") {
                   $btn.on("click",function(){
                       if($span.text()!= '')
                           $span.hide();
                   })
               }else {
                   $btn.on("click",function(){
                       $span.show();
                   })
               }
               $btn.appendTo("body");
           }
            (function () {
                addButton("remove");
                addButton("detach");
                addButton("Add");
                addButton("Event");
                addButton("Hide");
                addButton("Show");
            })();
        });
    </script>
</body>
</html>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.