jquery append() qui ne travaille pas à l'ajouter dynamiquement des éléments
Considérer le HTML
<ul>
<li>Default item</li>
<li>Default item</li>
</ul>
<button>Append</button>
et le jQuery, le code
$('button').live('click', function(){ //This action is done by an external script.
$('ul').append('<li>Added item</li>');
});
$('ul li').append('<b> x</b>'); //This action is done by me
Le truc, c'est que j'ai besoin d'ajouter le "x" pour tous les nouveaux éléments ajoutés à la dom.
Dans ce cas, seul défaut, les éléments sont ajoutés avec le "x".
Nouvellement ajouté des éléments ne sont pas annexés par "x".
Je suis sûr que le travail sera simple, mais ne peux pas l'obtenir droite!!!!
Exemple vivant - http://jsfiddle.net/vaakash/LxJ6f/1/
Vous devez vous connecter pour publier un commentaire.
Votre code est en cours d'exécution tout de suite, et donc, bien sûr, il n'a accès qu'aux éléments qui existent déjà. Le code de l'ajout de nouveaux éléments de la liste est en cours d'exécution plus tard, lorsque l'utilisateur clique sur quelque chose. Vous aurez à accrocher dans ce processus en tant que bien.
Une façon est d'accrocher le même cas qu'ils sont, et exécuter votre code du gestionnaire d'événement. Assurez-vous de raccorder l'événement après ils ne.
Leur code:
Votre code (après eux):
Mis à jour le violon
La raison je l'ai dit, votre code doit faire de son raccordement à l' après leur code, c'est que jQuery garantit l'ordre des appels à des gestionnaires d'événement: Lorsque l'événement se produit, les gestionnaires sont appelés dans l'ordre dans lequel ils sont attachés. En joignant votre gestionnaire après qu'ils attachent leur, vous garantir que votre gestionnaire est appelé après leurs a fait sa chose.
Si vous êtes inquiet au sujet de l'ordre de se mêler, vous pouvez toujours retarder votre code légèrement:
De cette façon, votre code est garanti à courir après tous les gestionnaires d'événements reliés à la
click
ont été exécutés.Vous devez répéter le "x" de code dans le gestionnaire d'événement:
Bien sûr, vous pourriez tout aussi bien mettre le gras "x" à droite dans la
<li>
lorsque vous ajouter ...modifier Si vous ne pouvez pas changer le gestionnaire de clic, alors la seule chose que vous pouvez faire est soit de sondage les DOM, ou bien les essayer quelque chose comme ce que @T. J. Crowder suggère (qui je pense devrait fonctionner très bien).
Pourquoi ne pas simplement le faire dans les premières ajouter?
Puisqu'il semble que vous n'avez pas accès à ce script qui est en train de faire de l'ajouter, vous pouvez lier votre propre gestionnaire.
Cela permet de sélectionner
li
éléments qui n'ont actuellement pas de imbriquéeb
élément, et il va ajouter un.Je l'ai placé dans un
setTimeout
puisque vous ne pouvez pas être en mesure de garantir l'ordre d'exécution des gestionnaires d'.Si vous préférez valide les sélecteurs CSS, faire ceci à la place:
ou ceci:
JSFIDDLE DÉMO montrant les deux gestionnaires distinct.