2010-06-30 15 views
5

¿Cómo se utiliza jQuery each() en una cadenajQuery each() con una cuerda

 

// For Exmaple 

var mystring = '<div> bleh content </div> <div> bleh content </div>'; 

$('div', mystring).each(function(e) { 
    alert('do something'); 
}); 
 

// el código anterior isnt lanzar una alerta para cada div en la cadena? No estoy seguro de por qué?

Respuesta

7

La forma en que lo haces, estás buscando div elementos dentro de los elementos pasados. Básicamente equivale a hacer un .find().

Lo que quiere es filter() que filtrará los elementos de nivel superior en la colección que aprobó.

prueba aquí:http://jsfiddle.net/u5uDg/

var mystring = '<div> bleh content </div> <div> bleh content </div>'; 

$(mystring).filter('div').each(function(e) { 
    alert('do something'); 
}); 

Si desea utilizar su enfoque, que tendría que dar los div elementos de un padre en la que jQuery puede realizar el hallazgo.

http://jsfiddle.net/u5uDg/1/

 // Added parent <div> element 
var mystring = '<div><div> bleh content </div> <div> bleh content </div></div>'; 

$('div', mystring).each(function(e) { 
    alert('do something'); 
}); 

lo solicitado en su comentario, puede retrasar la ejecución del código en el .each() usando setTimeout() y llegar a la duración de cada multiplicando el número de iteración actual por el número de milisegundos que desea retrasar.

http://jsfiddle.net/u5uDg/6/

var mystring = '<div> bleh content </div> <div> bleh content </div>'; 

    // Get the length 
var length = $(mystring).filter('div').length; 

$(mystring).filter('div').each(function(e) { 
    // setTimeout is used to delay code from executing. 
    // Here we multiply e (which is the index of the current 
    // iteration) by 2000 milliseconds, so each iteration 
    // is delayed by an additional 2000ms 
    (function(th) { 
     setTimeout(function() { 
       alert($(th).text()); 
       if(!--length) { alert('done'); } // alert if done 
     }, e * 2000); 
    }(this)); 
});​ 
+0

Pattrick muchas gracias, 1 pregunta más ¿cómo puedo poner a como demora de 2 segundos por lo .delay ('200'); en cada una de esas devoluciones de llamada. Entonces, para cada div en mystring, alert ('haz algo'); cada 2 segundos. – kr1zmo

+0

btw Pattrick gracias por ese sitio jsFiddle muchas gracias. – kr1zmo

+0

@ kr1zmo use setInterval http://www.w3schools.com/jsref/met_win_setinterval.asp – Mark

1

Dependiendo de su intento, el código jQuery tendrá un aspecto diferente.

Para iterar a través de divs con contenido, los divs no necesitan asignarse a una variable en javascript. Ellos sólo pueden vivir en el html:

<div class="mystring">bleh content</div> 
<div class="mystring">blehhh content</div> 

A continuación, la secuencia de comandos se parecerá a la de abajo y debería ver la alerta:

$('div.mystring').each(function(e) { 
    alert('do something'); 
}); 

Si usted está tratando de recorrer una matriz mystring , el código se vería así:

var mystring = '<div class="mystring">bleh content</div><div class="mystring">blehhh content</div>'; 
$.each(mystring, function(e) { 
    alert('do something'); 
}); 
Cuestiones relacionadas