1 votes

jQuery : Attacher l'événement mouseup à tous les noeuds de texte d'un conteneur

Je veux attacher un événement "mouseup" à tous les nœuds d'un conteneur, y compris les nœuds de texte, en utilisant jQuery. Comment faire ?

Mise à jour :

Si j'avais un fragment HTML comme celui-ci :

<p>Some text node <strong>strong text</strong> another text node.</p>

Actuellement, $("p *") appliquera l'événement à l'élément <p> y <strong> mais pas aux 2 noeuds de texte à l'intérieur de <p> séparément. Il n'est pas possible de modifier la source pour ajouter des classes.

3voto

rosscj2533 Points 4588

Bobince a raison de dire qu'il n'est pas possible de définir des gestionnaires d'événements sur un nœud de texte. Il semble que vous vouliez quelque chose comme

<p><span>Some text node</span> <strong>strong text</strong><span> another text node.</span></p>

et les événements seraient attachés aux balises span. Cependant, cela ne fonctionnerait pas si vous ne pouvez pas modifier la source.

2voto

nezroy Points 2413

La réponse de Tatu devrait fonctionner (à l'exception de l'utilisation de .mouseup au lieu de .click), mais êtes-vous sûr d'avoir besoin d'un gestionnaire d'événement sur chaque nœud ? Si vous utilisez

$('#container').mouseup(function(event){//code})

le modèle de bouillonnement d'événements appellera cette même fonction à chaque fois que l'événement mouseup se produira sur un élément à l'intérieur de #container, et le nœud DOM qui a réellement déclenché l'événement sera contenu dans la propriété event.target. Ceci est beaucoup plus efficace dans la plupart des cas.

1voto

Tatu Ulmanen Points 52098
$('#container *').mouseup(function() { ... });

Cela liera le gestionnaire de l'événement mouseup à tous les nœuds à l'intérieur de #container.

EDITAR

Modification de click -> mouseup pour plus de clarté.

1voto

bobince Points 270740

Vous ne pouvez pas définir de gestionnaires d'événements sur un Text nœud. Les nœuds de texte n'implémentent pas la fonction Cible de l'événement comme Element les nœuds Document et le nœud window faire de l'objet.

Vous ne devriez jamais avoir à le faire non plus. Régler un mouseup sur l'élément parent et vous obtiendrez mouseup pour tous ses contenus enfants. Cela s'explique par le fait que l'événement mouseup événement Les "bulles" en hausse à travers ses ancêtres.

0voto

Rodolphe Points 496

Je pense que le plus simple serait d'ajouter une classe à tous vos nœuds. Le sélecteur jquery sera aussi simple que : $('.votreNomDeClasse').dostuff()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X