2011-12-06 75 views
19

在JS中,我遇到了如何分割来自AJAX调用的字符串的问题。JS - 分割一个字符串并循环遍历结果

这是我到目前为止有:

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(); 

如果你已经/////...split脚本... /////上面我的剧本,我需要添加一个小功能,分裂从我的AJAX调用返回的字符串。

的字符串只包含的DIV的名字,像这样:

feedUpdateResponse = "div1/div2/div3/div4" 

我想通过它的斜杠(/)第一分割字符串,并通过不同的值运行一个循环做东西给这些元素在我的页面上。

为了给出我需要实现的想法,我给出了这个例子,它是ASP的一个混合体 - 它是我可以描述它的唯一方式(并且证明我已经尝试了): )

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

在我的网页我有一个产生jQuery的旋转木马,全部由单独的DIV包含在ASP脚本。 DIV被命名为DIV1,DIV2等。例如,DIV1内部是一个名为updateAvailable_div1的文本元素,它将提醒用户“有新的照片可用于此Feed,请单击刷新按钮”。

有人请向我解释我怎么能改变我的上面的例子在JS工作?只需将字符串分割成通过分流值的数组和循环...

+0

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

+0

我感谢你的建议,但真的不明白对不起 – TheCarver

回答

20

您可以使用.split()在指定字符上拆分字符串,并将结果作为数组返回。现在,它只是一个通过数组循环的事:

// 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

完美谢谢:) – 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

不要用'for .. in'循环迭代数组。 – gilly3

+1

@ gilly3我没有 –

+6

呃...你做到了。你只需要编辑就快。 :-) – gilly3

20

通过string.split("/")让您的阵列。用你选择的方法迭代你的数组。我喜欢Array.forEach()

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

在旧的浏览器使用.forEach()compatibility notes

+1

Jeeez,IE再次引发问题!只有IE9支持FOREACH(),所以不知道我可以使用它。我的用户中有17%,仍然在使用IE8 ...,7%依然在IE7上。谢谢虽然Gilly3 – TheCarver

+0

@马丁 - 看到我答案的最后一句话。该链接为旧版浏览器提供了一个实现。 – gilly3

-1

试试这个代码:

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

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

要引用John的答复的预编辑版本中的gilly3的评论:“不要用for .. in循环迭代数组”。请使用'.forEach()'或传统的for循环。 – nnnnnn