2009-07-29 23 views
13

¿Hay un código foreach en JQuery como en PHP? Tengo un código en php, comoforeach equivalente a php en jquery?

<?php foreach ($viewfields as $viewfield): ?>  
if("<?php echo $viewfield['Attribute']['required'];?>"=='true'){ 
     $("<span class='req'><em> * </em></span>").appendTo("#fb_contentarea_col1down21 #label<?php echo $viewfield['Attribute']['sequence_no']?>"); 
    } 


    if(<?=$viewfield['Attribute']['type'];?>=='text'||<?=$viewfield['Attribute']['type'];?>=='date'||<?=$viewfield['Attribute']['type'];?>=='number'){ 
     $("<input id=input<?=$viewfield['Attribute']['sequence_no'];?> type= 'text' style= 'width:<?=$viewfield['Attribute']['size'];?>px' data-attr=<?=$viewfield['Attribute']['type'];?> ></input><br>").appendTo("#fb_contentarea_col1down21 #<?=$viewfield['Attribute']['sequence_no'];?>"); 
    } 


    else if(<?=$viewfield['Attribute']['type'];?>=='textarea'){ 
     $("<textarea style= 'width:<?=$viewfield['Attribute']['size'];?>px' data-attr=<?=$viewfield['Attribute']['type'];?> id=input<?=$viewfield['Attribute']['sequence_no'];?>></textarea><br>").appendTo("#fb_contentarea_col1down21 #<?=$viewfield['Attribute']['sequence_no'];?>"); 
} 

¿Hay alguna equivalente de foreach en jQuery? ¿Cómo puedo lograr esta misma funcionalidad en jQuery?

EDIT 1:

pensé que trabajó pero me da un error. El código y el mensaje de error se dan a continuación.

for(<?=$viewfield;?> in <?=$viewfields;?>){ 

if("<?=$viewfield['Attribute']['required'];?>"=='true'){ 
      $("<span class='req'><em> * </em></span>").appendTo("#fb_contentarea_col1down21 #label<?php echo $viewfield['Attribute']['sequence_no']?>"); 
} 

if(<?=$viewfield['Attribute']['type'];?>=='text'||<?=$viewfield['Attribute']['type'];?>=='date'||<?=$viewfield['Attribute']['type'];?>=='number'){ 
      $("<input id=input<?=$viewfield['Attribute']['sequence_no'];?> type= 'text' style= 'width:<?=$viewfield['Attribute']['size'];?>px' data-attr=<?=$viewfield['Attribute']['type'];?> ></input><br>").appendTo("#fb_contentarea_col1down21 #<?=$viewfield['Attribute']['sequence_no'];?>"); 
} 

else if(<?=$viewfield['Attribute']['type'];?>=='textarea'){ 
      $("<textarea style= 'width:<?=$viewfield['Attribute']['size'];?>px' data-attr=<?=$viewfield['Attribute']['type'];?> id=input<?=$viewfield['Attribute']['sequence_no'];?>></textarea><br>").appendTo("#fb_contentarea_col1down21 #<?=$viewfield['Attribute']['sequence_no'];?>"); 
} 

}

mensaje de error:

error de sintaxis para (en Array)

Alguien me puede ayudar ..

+1

JavaScript y PHP no pueden interactuar ... PHP crea el código JavaScript antes de enviarlo al cliente. Después de que se envía al cliente, se ejecuta. Si miras en la fuente, verás que lo que PHP generó es 'for (in Array) {' (porque '$ viewfield' es una variable vacía, y' $ viewfields' es una matriz PHP que, cuando se representa como string se muestra como 'Array'.) Tendrá que hacerlo todo en JavaScript o en PHP, no puede mezclar los dos idiomas. – Blixt

+0

pero debido al uso de php dentro de jquery, aparece un mensaje de error en la etiqueta document.ready() close. Si lo elimino por cada código php, el error desaparecerá y la ubicación del documento funcionará correctamente. Entonces, ¿cómo escribir eso para cada código en JQuery? – Angeline

Respuesta

43

La función $.each es similar.

Se permite repetir las matrices usando una función de devolución de llamada donde se tiene acceso a cada elemento:

var arr = [ "one", "two", "three", "four", "five" ]; 


$.each(arr, function(index, value) { 
    // work with value 
}); 

Tal vez es útil saber, si quieres romper el bucle, puede hacerlo con return false; o si desea saltear solo una iteración (continuar), return true;

25

Si desea repetir un objeto, yo recomendaría la variante de JavaScript:

for (var key in obj) { 
    alert(key + ': ' + obj[key]); 
} 

Usted puede objetos también iterar en jQuery como este:
Nota! Hacer esto no tiene sentido a menos que piense que esta sintaxis es mucho más simple de mantener. La sintaxis siguiente tiene mucho más sobrecarga que el anterior, JavaScript estándar, for-loop.

$.each(obj, function (key, value) { 
    alert(key + ': ' + value); 
}); 

Para iterar matrices, así es como lo haces en JavaScript estándar (suponiendo arr es la matriz):

for (var i = 0, l = arr.length; i < l; i++) { 
    alert(i + ': ' + arr[i]); 
} 

Para hacerlo en jQuery, puede hacerlo de esta manera :

$.each(arr, function (index, value) { 
    alert(index + ': ' + value); 
}); 
+0

¿Puedo iterar sobre los elementos de una matriz usando cada función? – Angeline

+0

Sí, he agregado cómo hacerlo ahora. – Blixt

3

Jquery que operan en los selectores:

$('a').each(function() { 
    $(this).click(function(e) { 
     e.preventDefault() 
     var href = this.href; 
     open(href); 
    }); 
    // operate on the anchor node. 
}); 

jQuery direct $.cada uno:

var a = ['one', 'two']; 

$.each(a, function() { 
    alert(this) 
}); 

JS: la vainilla por bucle

for (var i = 0, len = 10; i<l; ++i) { 
    alert(i) 
} 

JS # 2: vainilla para

var humanLimbs = ['arms', 'legs']; 
for (var limb in humanLimbs) { 
    if (humanLimbs.hasOwnProperty(limb)) { 
     alert(limb) 
    } 
} 

Js # 3: bucle infinito

for (;;) { alert(1) } // dont try this :p 
4

Javascript apoya la for(data in data_array) sintaxis. jQuery también tiene una función $ .each (como ya se mencionó)

+2

for-in itera sobre las propiedades de un objeto, no los elementos de una matriz. – NickFitz