Differenze tra detach (), hide () e remove () - jQuery


Risposte:


151

hide()imposta la displayproprietà CSS degli elementi corrispondenti su none.

remove() rimuove completamente gli elementi corrispondenti dal DOM.

detach()è simile remove(), ma mantiene i dati memorizzati e gli eventi associati agli elementi corrispondenti.

Per reinserire un elemento separato nel DOM, è sufficiente inserire il jQueryset restituito da detach():

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

...

span.appendTo('body');

7
In combinazione con .clone (true), puoi utilizzare detach per modelli economici che evitano eventi live jquery: jsfiddle.net/b9chris/PNd2t
Chris Moschini

Continuo a non vedere la differenza. Se uso removeal posto di detach, l'esempio funziona ancora.
comecme il

12
@comecme: se hai associato un evento come un gestore di clic allo span, lo chiami remove()e lo alleghi di nuovo, il binding sarà cancellato e facendo clic sullo span non farà nulla. Se chiami detach()e ricolleghi, l'associazione rimane e il gestore dei clic continua a funzionare.
lambshaanxy

La risposta di @ Kumar è un po 'più corretta riguardo a remove () poiché non viene rimossa dal DOM. Ciò ha delle ripercussioni poiché gli elementi complessi con eventi associati tendono a consumare molta memoria del browser se non vengono masticati dal garbage collector abbastanza velocemente. Un trucco per liberare memoria più velocemente è $ (element) .html (''). Remove ();
oskarth

hide () imposta la proprietà di visualizzazione CSS degli elementi corrispondenti su nessuno. Significa: puoi descrivermi la differenza tra hide () e display: nessuno.
Krish

50

Immagina un pezzo di carta su un tavolo con degli appunti scritti a matita.

  • hide -> gettaci sopra un vestito
  • empty -> rimuovi le note con una gomma
  • detach -> prendi il foglio in mano e tienilo lì per qualsiasi progetto futuro
  • remove -> prendi la carta e gettala nella pattumiera

La carta rappresenta l'elemento e le note rappresentano il contenuto (nodi figlio) dell'elemento.

Un po 'semplificato e non del tutto preciso, ma di facile comprensione.


14

hide() imposta la visualizzazione dell'elemento corrispondente su nessuno.

detach() rimuove gli elementi corrispondenti, incluso tutto il testo e i nodi figlio.

Questo metodo memorizza tutti i dati associati all'elemento e quindi può essere utilizzato per ripristinare i dati dell'elemento nonché i gestori di eventi.

remove() rimuove anche gli elementi corrispondenti, incluso tutto il testo e i nodi figlio.

Tuttavia, in questo caso è possibile ripristinare solo i dati dell'elemento, non i suoi gestori di eventi.


11

In jQuery, ci sono tre metodi per rimuovere elementi dal DOM. Questi tre metodi sono .empty(), .remove()e .detach(). Tutti questi metodi vengono utilizzati per rimuovere elementi dal DOM, ma sono tutti diversi.

.nascondere()

Nascondi gli elementi corrispondenti. Senza parametri, il metodo .hide () è il modo più semplice per nascondere un elemento HTML:

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

.vuoto()

Il metodo .empty () rimuove tutti i nodi figlio e il contenuto dagli elementi selezionati. Questo metodo non rimuove l'elemento stesso oi suoi attributi.

Nota

Il metodo .empty () non accetta alcun argomento per evitare perdite di memoria. jQuery rimuove altri costrutti, come dati e gestori di eventi, dagli elementi figlio prima di rimuovere gli elementi stessi.

Esempio

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

Ciò si tradurrà in una struttura DOM con il testo Hai eliminato:

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

Se avessimo un numero qualsiasi di elementi nidificati all'interno <div class="hai">, anche questi verrebbero rimossi.

.rimuovere()

Il metodo .remove () rimuove gli elementi selezionati, incluso tutto il testo e i nodi figli. Questo metodo rimuove anche i dati e gli eventi degli elementi selezionati.

Nota

Usa .remove () quando vuoi rimuovere l'elemento stesso, così come tutto ciò che contiene. Inoltre, vengono rimossi tutti gli eventi associati ei dati jQuery associati agli elementi.

ESEMPIO

Considera il seguente html:

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

Ciò si tradurrà in una struttura DOM con l' <div>elemento eliminato:

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

Se avessimo un numero qualsiasi di elementi nidificati all'interno <div class="hai">, anche questi verrebbero rimossi. Anche altri costrutti jQuery, come i gestori di dati o di eventi, vengono cancellati.

.detach ()

Il metodo .detach () rimuove gli elementi selezionati, incluso tutto il testo e i nodi figlio. Tuttavia, conserva dati ed eventi. Questo metodo conserva anche una copia degli elementi rimossi, che consente loro di essere reinseriti in un secondo momento.

Nota

Il metodo .detach () è utile quando gli elementi rimossi devono essere reinseriti nel DOM in un secondo momento.

Esempio

<!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>

Per maggiori informazioni, visita: 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.