15 Stimmen

Ist livequery veraltet?

Ich sehe mir einen alten Code an. Ich sehe, dass für Elemente, die mit Ajax hinzugefügt werden, gibt es viele livequery Code. Wird livequery mit den neueren Versionen von jquery nicht mehr benötigt? Weiß jemand, ab welcher Version genau es nicht mehr benötigt wird?

$("#somediv").livequery(function(){
    $(this).click(function(){

    });
});

4 Stimmen

Ja, livequery ist tot. Es ist auch ein Anti-Muster

2 Stimmen

@Raynos Was ersetzt es? Bis jetzt habe ich noch keine Beispiele gefunden, die seinen Zweck erfüllen. .on ist für Ereignisse, und das einzige Jquery-Ereignis, das nahe kommt, ist DOMNodeInserted, die nicht breite Browser-Unterstützung hat.

1 Stimmen

@AaronLS Ereignisdelegation wird Ihr Problem lösen. Wenn Sie benötigen DOMNodeInserted Ihr entweder den Aufbau einer komplexen Templating-System oder Ihr tun es falsch. Wenn das erstere dann nur bauen eine einfache Templating-System statt

15voto

user113716 Punkte 309387

livequery ist ein völlig anderes Konzept als .live() .

En .live() Methode verwendet Veranstaltungsdelegation um Ereignisse zu behandeln, die irgendwo auf der Seite auftreten.

livequery ruft Handler auf, wenn DOM-Änderungen auftreten (über jQuery-Methoden) .

Für das folgende Beispiel: Wenn ein Element mit class="some_class" zum DOM hinzugefügt wird (oder die Klasse zu einem Element hinzugefügt wird), wird der erste Handler ausgeführt. Wenn sie entfernt wird, wird der zweite ausgeführt.

$('.some_class').livequery( function() {

       // apply a plugin to the element
    $(this).somePlugin();

}, function() {

    // clean up after the element was removed

});

Es sollte wenig aktuell Bedarf an livequery aber in dem seltenen Fall, dass Sie auf DOM-Änderungen reagieren müssen und keine Kontrolle über die jQuery haben, die diese Änderungen verursacht, kann es nützlich sein.

0 Stimmen

@Raynos: Ich möchte es nicht als hässlich bezeichnen, aber ich würde sagen, dass ich fast immer einen anderen Ansatz vorschlagen würde.

0 Stimmen

Es durchläuft das Dom jeden Zeitspanne auf der Suche nach Veränderungen. Es pollt im Grunde die Dom, prüft jedes verdammte Element und sieht, ob sich etwas geändert hat. unglaublich rechenaufwendig und einfach dumm, es doesnt sogar Funktion für Dom Mutation Ereignisse erkennen

9 Stimmen

@Raynos: Ich habe gerade einen Blick auf den Quelltext geworfen und einen kurzen Test durchgeführt, und Ihre Beschreibung, wie livequery funktioniert, ist nicht richtig. Tatsächlich werden die jQuery-Methoden mit einer Funktion umhüllt, die internen Code aufruft, bevor das Original aufgerufen wird. Also, wenn eine Methode aufgerufen wird, führt es eine DOM-Auswahl auf der Grundlage der ursprünglichen Selektor zur Verfügung gestellt, und gilt die Rückrufe, wenn neue Elemente gefunden wurden. Es werden also nicht in jedem Zeitraum alle DOM-Elemente abgefragt.

6voto

Reign.85 Punkte 2283

Sie müssen Folgendes verwenden on() und fügen Sie das Ereignis an ein übergeordnetes Ereignis oder einen Körper an. Bsp:

$('#obj').livequery('click', function() { ... });
$('#obj').livequery(function() { ... });

werden.

$('body').on('click', '#obj', function() { ... });
$('body').on('DOMNodeInserted','#obj', function() { ... });

beachten Sie, dass DOMNodeInserted IE9+ ist

1 Stimmen

Ich kann bestätigen, dass es in FF 59 funktioniert. Vielen Dank für diesen Tipp!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X