jQuery: Wie Sie eine jQuery-plugin-Funktion auf ein element, das bisher noch nicht Hinzugefügt wurden, um den DOM?
Ich habe ein jQuery-plugin, das ich verwende:
$(document).ready(function(){
$('.elements').fancyPlugin();
});
Dies funktioniert gut, bis ich starten Sie das hinzufügen neuer Elemente:
$.get('ajax.html', function(data){
$('#container').html(data);
});
Konnte ich rufen Sie die plugin-Funktion wieder wie diese:
$.get('ajax.html', function(data){
$('#container').html(data).find('.elements').fancyPlugin();
});
...außer, dass die AJAX passiert im inneren ein weiteres jQuery-plugin, das nicht sollte, um zu wissen, über die fancyPlugin()
.
Wie kann ich dieses plugin für alle aktuellen und zukünftigen Elemente?
- ok ok ok, ich weiß, dieser...... hrmmmm... ok, vielleicht nicht komplett, aber Sie sollten Sie verwenden einen Ereignis-listener. Ich würde binden DOMNodeInserted auf das Dokument, und rufen Sie die Funktion dann.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das funktioniert in allen Browsern außer dem IE:
Anderen Weg, dies zu tun ist, erstellen Sie Ihre eigene event :
Dann, wenn die Zugabe von ellements, einfach trigger-Ereignis mit der
trigger
Methode!Tun, so wird es Ihnen ermöglichen, legen Sie das Verhalten in der javascript-Datei !
aDiv.trigger('added.yourns');
, warum konnte ich nicht einfach anrufen.fancyPlugin()
auf der neu geladenen Knoten? Wir müssen uns NICHT anrufen, nichts jedes mal, wenn ein neuer Knoten Hinzugefügt werden; das ist der ganze Sinn dieser Frage, oder bin ich etwas fehlt?Wenn diese Elemente Hinzugefügt werden, mit AJAX können Sie mit der
.ajaxSuccess()
Methode:Und hier ist ein live-demo.
Haben Ihre AJAX-handler trigger einige benutzerdefinierte Ereignis wie
contentAdded
, und bindenfancyPlugin
zu diesem Ereignis.Alternativ können Sie DOM-mutation-events zu nennen
fancyPlugin
für jede änderung in den container. Native browser-Unterstützung ist nicht ganz dort noch, aber es gibt plugins, die sollten sich darum kümmern.Interessant. Im wesentlichen, Sie würde gerne so etwas wie:
Das problem ist, dass Art von Logik ist nicht verfügbar. Elemente laden auf der Seite nicht auslösen, die bestimmte Ereignisse, die ich bin mir dessen bewusst, dass Sie nur Erben CSS aus dem DOM-Knoten über Ihnen. Was ich tun würde, ist einfach, aus der
$.get
Erfolg Funktion, lösen Sie ein benutzerdefiniertes Ereignis. Der rest des Codes einbinden können, in diese Falle zu tun, alle plugins nachladen arbeiten, die nötig sein könnten. Sie übergeben eine Liste von relevanten Selektoren mit dem Ereignis, und verwenden Sie diese zum aufrufen des entsprechenden plugins (Sie können einen Satz vonselector -> plugin refresh function
Beziehungen in einer hashtable)Haben Sie schaute auf die jQuery .live-event-handler? Es bindet automatisch, wenn ein neues Element Hinzugefügt, um den dom, wenn es die spezifizierten Anforderungen erfüllt.
http://api.jquery.com/live/
load
Veranstaltung ist nicht implementiert jQuery-live-Funktion: stackoverflow.com/questions/3196404/...Was ist, wenn Sie so etwas wie dies?
Die Ereignisse werden nicht erneut gebunden, nachdem ajax-Aufrufe oder innerhalb der Inhalte, die Sie zurückgeben.
live()
fügt einen handler für das Ereignis jetzt und in der Zukunft."load
Veranstaltung ist nicht implementiert jQuery-live-Funktion: stackoverflow.com/questions/3196404/...