Basierend auf this question, schrieb ich den folgenden Code:auf DOMNodeInserted funktioniert nicht wie erwartet?
$(function() {
$(document).on('DOMNodeInserted',"span:contains('Suggested Post')", function() {
console.log("New Suggested Post found");
})
})
Als ich die Seite nach unten scrollen und diese Elemente werden erstellt, ich die Konsole Meldung nicht sehen, ich sehe erwarten. Wenn ich jedoch in der Konsole $("span:contains('Suggested Post')").length
manuell eingabe, wird die Ausgabe weiter erhöht.
Ideen?
Snippet von @Barmar angefordert. Es verhält sich nicht genau wie meine realen Szenario, aber es ist immer noch nicht richtig ...
$(document).on('DOMNodeInserted', "div:contains('Banana')", function() {
console.log("new banana detected!");
});
$('#btn').on('click', function() {
var fruit = '';
switch (Math.floor((Math.random() * 3) + 1)) {
case 1:
fruit = 'Apple'
break;
case 2:
fruit = 'Orange'
break;
case 3:
fruit = 'Banana'
break;
default:
fruit = "WTF"
}
$('#fakeDocument').append('<div>' + fruit + '</div>');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="fakeDocument">
<strong>Banana Detector</strong>
<button id="btn" type="button">Add Banana!</button>
</div>
Mit Ihrer Delegation wird der Handler nur ausgelöst, wenn die Elemente ** innen geschaffen ** ein Element, das den Wähler übereinstimmt, nicht, wenn das Element, das den Selektor erstellt wird übereinstimmt. – Barmar
ahhhhh, ich verstehe. Irgendwelche Vorschläge für Änderungen? –
Hmm, da könnte ich mich irren. https://www.w3.org/TR/DOM-Level-3-Events/#event-type-DOMNodeInserted sagt, dass "event.target" der einzufügende Knoten ist, nicht der Container. Und jQuery stimmt den Selektor mit dem Ziel überein. – Barmar