2010-10-01 23 views
23

Quiero añadir una clase a cualquier elemento DOM que se encuentra en la página ahora o en el futuro que tiene una determinada categoría y cumple con algunos criteriosjQuery evento en vivo para los elementos DOM añadido

así que para algunos pseudo código

$('.location').live('load',function(){ 
    if($(this).find('input:first').val().substr(0,1) == "!"){ $(this).addClass('hidden')} 
}); 

por supuesto, esto no hace nada

editar nota

esto no funciona ya sea

$('.location').live('load',function(){ 
    alert('adding location'); 
}); 
+0

Consulte mi respuesta sobre el uso de livequery() en lugar de live(). Es un plugin en el que se basa live(). – Gregg

+0

¿Qué versión de jQuery estás usando? –

+0

Estoy usando 1.4.2 – mcgrailm

Respuesta

24

La función live() de jQuery es solo un subconjunto del plugin livequery, que es mucho más rico. Si usa livequery puede hacer algo como ...

$('.location').livequery(function() { 
    // perform selector on $(this) to apply class 
}); 

Eso cubrirá los elementos existentes más los elementos futuros añadidos al DOM.

+0

, así que ¿este es un complemento que debe incluirse? – mcgrailm

+0

Sí. http://docs.jquery.com/Plugins/livequery – Gregg

+1

+1 No vi esta respuesta cuando respondí. Eliminado mío : o) Aunque no creo que diría que uno es un subconjunto del otro. La forma en que trabajan es completamente diferente. – user113716

0

No puede hacer esto.

Vas a tener que hacer:

$('.location').filter(function() { 
    return ($(this).find('input:first').val().substr(0, 1) == "!"); 
}).addClass('hidden'); 

aplicarlo a todos los elementos actualmente en la página, y luego añadir manualmente la clase 'oculta' a futuros elementos que se agregan a la DOM.

+0

esperando poder encontrar algo que los cubra a todos pero esta puede ser la única forma – mcgrailm

+0

Si lo haces correctamente, no tendría que ser manual. – Gregg

+0

@Gregg: si conoce una solución correcta para agregar clases automáticamente para seleccionar elementos que se agregan al DOM en una etapa posterior, por favor compártalo. – Matt

0

Probablemente el código .subtr(0,1) = "!" no haga lo que usted quiere.

+0

sí, comprueba si el primer carácter de la cadena es "!" No puedo recibir la alerta. – mcgrailm

+0

Hay un solo caracter '=' allí. – yfeldblum

+0

sí, lo siento, mi mal, tuve un error tipográfico, estás en lo cierto, pero esta no es la respuesta al problema, gracias por tu ayuda – mcgrailm

Cuestiones relacionadas