2011-12-06 26 views
19

En JS, tengo problemas para encontrar la manera de dividir una cadena proveniente de una llamada AJAX.JS - División de una cadena y bucle de resultados

Esto es lo que tengo hasta ahora:

xmlhttp.onreadystatechange = function() 
{ 
if (xmlhttp.readyState==4 && xmlhttp.status==200) 
{ 
feedUpdateResponse = xmlhttp.responseText; 
/////...split script...///// 
} 
} 
xmlhttp.open("GET","https://myDomain.com/myScript.aspx",true); 
xmlhttp.send(); 

donde se tiene /////...split guión ... ///// en mi script de arriba, tengo que añadir una pequeña función que divide la cadena devuelta por mi llamada AJAX.

La cadena simplemente contiene nombres de DIVs, como este:

feedUpdateResponse = "div1/div2/div3/div4" 

me gustaría dividir primero la cadena por sus barras inclinadas (/) y ejecute un bucle a través de los diferentes valores y hacer cosas a aquellos elementos en mi página.

Para dar una idea de lo que necesito lograr, he dado este ejemplo que es una mezcla de ASP & JS - es la única forma en que puedo describirlo (y demostrar que he tenido un intento):)

MyArray = Split(feedUpdateResponse,"/") 
For Each X In MyArray 
documentGetElementById('updateAvailable_'+x).style.visibility="visible"; 
Next 

En mi página tengo una secuencia de comandos ASP que produce carruseles jquery, todos contenidos en DIV por separado. Los DIV se denominan DIV1, DIV2, etc. Dentro de DIV1, por ejemplo, hay un elemento de texto llamado updateAvailable_div1 que alertará al usuario "Hay nuevas fotos disponibles para este feed, haga clic en el botón Actualizar".

¿Podría alguien explicarme cómo puedo cambiar mi ejemplo anterior para trabajar en JS? Sólo hay que dividir la cadena en una matriz y bucle a través de los valores de división ...

+0

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split –

+0

Agradezco su sugerencia, pero realmente no lo entiendo lo siento – TheCarver

Respuesta

20

Puede usar .split() para dividir una cadena en un carácter especificado con los resultados devueltos como una matriz. Así entonces es sólo una cuestión de bucle a través de la matriz:

// given your existing variable 
// feedUpdateResponse = "div1/div2/div3/div4" as set in the 
// code in the question, add this: 

var a = feedUpdateResponse.split("/"), 
    i; 

for (i = 0; i < a.length; i++) { 
    document.getElementById("updateAvailable_" + a[i]).style.visibility 
                   = "visible"; 
} 
+0

Gracias perfectos :) – TheCarver

0
var feedUpdateResponse = "div1/div2/div3/div4"; 
var feedUpdateSplit = feedUpdateResponse.split("/"); 

for (var x = 0; x < feedUpdateSplit.length; x++) { 
    document.getElementById("updateAvailable_" + feedUpdateSplit[x]).style.visibility = "visible"; 
} 
+1

No itere las matrices con bucles 'for .. in'. – gilly3

+1

@ gilly3 No lo hice –

+6

Bueno ... lo hiciste. Usted es rápido con la edición. :-) – gilly3

20

Obtener la matriz a través de string.split("/"). Iterate tu matriz usando tu método de elección. Yo prefiero Array.forEach():

feedUpdateResponse.split("/").forEach(function (item) { 
    document.getElementById(item).style.visibility = "visible"; 
}); 

Véase el compatibility notes para el uso de .forEach() en navegadores antiguos.

+1

¡Jeeez, IE causa problemas otra vez! Solo IE9 admite FOREACH(), por lo que no estoy seguro de poder utilizarlo. El 17% de mis usuarios siguen usando molestamente IE8 ... el 7% todavía están en IE7. Gracias a Gilly3 – TheCarver

+0

@martin - ver la última frase de mi respuesta. Ese enlace proporciona una implementación para navegadores antiguos. – gilly3

-1

probar este código:

var a = feedUpdateResponse.split("/"); 

for (i in a) { 
    document.getElementById("updateAvailable_" + a[i]).style.visibility 
                   = "visible"; 
} 
+2

Para citar el comentario de gilly3 de la versión anterior a la edición de la respuesta de John: "No iterar matrices con para ... en bucles". Utilice '.forEach()' o un bucle for tradicional. – nnnnnn

Cuestiones relacionadas