Quiero adjuntar un evento "mouseup" en todos los nodos de un contenedor, incluidos los nodos de texto que usan jQuery. ¿Cómo puedo hacer eso?

Actualización:

Si tuviera un fragmento HTML como este:

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

Actualmente, $ ("p *") aplicará el evento a <p> y <strong> pero no a los 2 nodos de texto dentro de <p> por separado. Modificar la fuente para agregar clases no es una opción.

1
jeffreyveon 10 dic. 2009 a las 16:08

5 respuestas

La mejor respuesta

Bobince tiene razón en que no puede establecer controladores de eventos en un nodo de Texto. Parece que quieres algo como

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

Y los eventos se adjuntarían a las etiquetas span. Sin embargo, eso no funcionaría si no puede cambiar la fuente.

3
rosscj2533 10 dic. 2009 a las 13:47

Creo que lo más fácil sería agregar una clase a todos sus nodos. El selector jquery será tan simple como: $ ('. YourClassName'). Dostuff ()

0
Rodolphe 10 dic. 2009 a las 13:12
$('#container *').mouseup(function() { ... });

Eso vinculará el controlador de eventos de mouseup a todos los nodos dentro de #container.

EDITAR

Cambio de clic -> mouseup para ser más clara.

1
Tatu Ulmanen 10 dic. 2009 a las 15:52

No puede establecer controladores de eventos en un nodo Text. Los nodos de texto no implementan el EventTarget interfaz como los nodos Element, el nodo Document y el objeto window lo hacen.

Nunca deberías necesitarlo tampoco. Establezca un controlador mouseup en el elemento primario y obtendrá mouseup eventos para todo su contenido secundario. Esto se debe a que el evento mouseup 'burbujea' a través de sus antepasados.

1
bobince 10 dic. 2009 a las 13:41

Si bien la respuesta de Tatu debería funcionar (excepto usar .mouseup en lugar de .click), ¿está seguro de que realmente necesita un controlador de eventos en cada nodo? Si te unes usando

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

El modelo de burbujeo de eventos llamará a esa misma función cada vez que el evento de mouseup ocurra en cualquier elemento dentro de #container, y el nodo DOM que realmente activó el evento estará contenido en la propiedad event.target. Esto es mucho más eficiente en la mayoría de los casos.

2
nezroy 10 dic. 2009 a las 13:19