2011-10-25 11 views
5

La búsqueda no ha revelado una solución a mi pregunta, por lo que pregunta aquí. He estado usando livequery() desde hace un tiempo en combinación con live(). En general, uso live() para eventos conocidos como clics pero usando livequery para activar un selector específico y aplicar un complemento. Por ejemplo ...convirtiendo livequery a live/delegate /?

$('#childDomains').livequery(function() { 
    var element = $(this); 
    element.jqGrid({ 
    // plugin initialization here 
    }); 
}); 

Me pregunto si hay una manera de hacer lo mismo usando vivo()/delegado() o alguna otra característica fresca jQuery no sé acerca. Intento aligerar mi carga de dependencia y noté que livequery no se ha actualizado desde el 02-2010.

ACTUALIZACIÓN: Supongo que no estoy siendo lo suficientemente claro. Tengo una página que usa jqGrid y convierte un elemento TABLE en una cuadrícula de datos jqGrid Ajax. No hay un evento de clic real para que esto ocurra. La página en la que se encuentra esta tabla se carga a través de ajax y cada vez que DOM ve $ ("# childDomains") debe aplicar el plugin jqGrid a ese elemento. Al igual que mi ejemplo de livequery está haciendo.

Según tengo entendido hasta ahora, no creo que esto sea posible sin una consulta en vivo, pero quería preguntar para asegurarme.

Respuesta

4

No, no hay formas claramente mejores de hacerlo con jQuery; Yo diría que livequery es el mejor método en este momento.

Dichas son otras formas posibles de hacerlo. Here alguien ha lanzado su propio código de sondeo para detectar cuándo se inserta un elemento en el DOM. Podrías adaptar esto, pero por lo que puedo ver, Livequery ya está haciendo esto por ti.

Otra forma es escuchar los eventos DOMNodeInserted como se indica here pero esto es deprecated in the W3C Level 3 Events Specification, debido a poor performance. También es not IE compatible.

This question tiene una buena discusión sobre la supervisión de eventos DOMNodeInserted y una alternativa de enganche en cualquier método que pueda cambiar el DOM. (Es un poco viejo, pero por mi investigación nada ha cambiado todavía).

En conclusión, siga usando livequery.

También tenga en cuenta que a partir de jQuery 1.7 .live() (deprecated), y .delegate() (superseded) debe sustituirse con .on() (y .die() con .off()). Sin embargo, los nuevos métodos no introducen nada que pueda resolver su dependencia de livequery.