2010-04-28 2 views

risposta

24

Ho risolto con $(".qtip").remove();

+3

La rimozione tramite questo selettore non cancella le risorse associate all'elemento di destinazione. –

+0

Qtip2 usa anche 'lazy-loading' per impostazione predefinita, quindi le descrizioni dei comandi non verranno create fino a quando la prima apperance – Bizniztime

2

Sembra buggy. Ho avuto un po 'di fortuna con questo, ma non ripristina i titoli originali. Ho il sospetto destroy non fa che o ...

$('span.taxonomy-image-link-alter img') 
    .filter(function(){return $(this).data('qtip');}) 
    .qtip('destroy'); 

Sembra che non si può chiamare destroy su elementi senza QTIP - non manca in silenzio, ma genera un'eccezione e si ferma il ciclo.

+3

ho risolto in questo modo:. $ ("Qtip") rimuovere (); Rimuovo tutti gli elementi aggiunti da qTip nella parte inferiore della pagina – aneuryzm

+0

@Patrick - che suona meglio, anche se potrebbe lasciare alcuni dati e gestori di eventi. La mia versione non è migliore però ... Dovresti aggiungere un'altra risposta e accettarla. – Kobi

17

qTip2 è la versione più recente di questo script, ma vorrei solo far notare 1 cosa.

$(".qtip").remove(); 

Questo pezzo di codice non ha distrutto tutti i tooltip: semplicemente ha rimosso i contenitori. Tutti i gestori e gli eventi associati agli oggetti che hanno invocato i tooltip sono ancora disponibili nella memoria del browser.

In QTIP per eliminare il tooltip ed è gestore scompletely si dovrebbe usare:

$(mytooltip).qtip("destroy"); 

o

$(mytooltip).qtip('api').destroy(); 

In qTip2 tuttavia usando questo:

$(mytooltip).remove(); 

Sarebbe automaticamente chiama l'api e distruggi il tooltip e i suoi handler completamente.

+2

+1 rimuovendo i contenitori distruggerà anche qualsiasi elemento all'interno, non solo il tooltip di hover. –

16
$('.qtip').each(function(){ 
    $(this).data('qtip').destroy(); 
}) 
+0

Questo ha funzionato perfettamente per me – sh1rts

+0

Buono se non è possibile ottenere il selettore di elementi. – Mistergreen

+0

Questa sembra la soluzione più sensata. – bbeckford

0
if (jQuery('.qtip').length > 0) 
    { 
     jQuery("#IdElement").qtip("destroy"); 
    } 
2

ho sperimentato che l'API-chiamare

$(selector).qtip('destroy') 

non rimuove tutti i dati-QTIP affidabile, soprattutto quando si utilizzano diversi qtips contemporaneamente.

Nel mio caso ho dovuto togliere un qtip visibile e utilizzati con successo questa soluzione:

$(selector).removeData('qtip'); 
$('.qtip :visible').remove(); 
0

Nessuna di queste risposte mi ha aiutato.

Nel mio caso, ho avuto un qtip su un elemento con un pulsante di chiusura. Il pulsante di chiusura ha rimosso l'elemento, quindi non c'era alcun punto di riferimento per rimuovere il qtip dopo la rimozione dell'elemento.

Ho pensato che il $('.qtip:visible').remove() avrebbe funzionato, ma in qualche modo rimosso tutti i qtip della pagina, e non quello singolo che volevo rimosso.

ho notato che il qtip visibile è dato una classe qtip-active, così che cosa ha funzionato per me era:

$('.qtip-active').remove();

11

qtip("destroy") è buggy (versione 2.1.1) e non lo fa chiaro tutto.

Ho trovato questo come una soluzione adeguata:

// don't call destroy if not needed 
if (element.data("qtip")) { 
    // the 'true' makes the difference 
    element.qtip("destroy",true); 
    // extra cleanup 
    element.removeData("hasqtip"); 
    element.removeAttr("data-hasqtip"); 
} 
+0

+1, qtip destroy non aveva i risultati desiderati per me –

+0

+1, confermando che per 2.1.1, l'aggiunta vera, ha fatto il lavoro. –

+0

Molto apprezzato! Mi sembra di avere lo stesso problema in 2.1.1, e questa soluzione alternativa è il trucco per me. – luke

0

può essere un po 'in ritardo, ma ho avuto problemi con la memoria e il caricamento della pagina quando una chiamata AJAX sostituire il contenuto nella pagina, cancellando il qtip2 bersaglio oggetti prima di distruggerli, quindi alcuni elementi rimangono anche se il bersaglio fosse sparito.

In base al fatto che a volte si desidera pulire tutti gli elementi e i dati qtips2, non importa se l'oggetto originale esiste o meno, alcuni elementi del tooltip rimangono sul corpo, quindi quando il bersaglio originale è andato non c'è un modo semplice chiamare il metodo destroy().

A meno che non si effettui la ricerca degli oggetti creati anziché dei target.

jQuery('div[id^="qtip-"]').each(function(){ //search for remaining objects 

    _qtip2 = jQuery(this).data("qtip"); //access the data where destroy() exist. 

    //if it's a proper qtip2 object then call the destroy method. 
    if(_qtip2 != undefined){ 
     // the "true" is for immediate destroy 
     _qtip2.destroy(true); 
    } 
    //if everything went right the data and the remaining objects in the body must be gone. 
}); 

Ho usato jQuery per un problema di conflitto, ma è possibile utilizzare "$" (simbolo) al posto di JQuery