2011-12-06 4 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 & JSの組み合わせであるこの例を挙げました。これは私がそれを記述できる(そして私が試したことを示す)唯一の方法です。 )

私のページには、jqueryカルーセルを作成するASPスクリプトがあり、すべてが別々のDIVに含まれています。 DIVの名前はDIV1、DIV2などです。たとえば、DIV1の内部には、updateAvailable_div1というテキストエレメントがあります。「このフィードで利用できる新しい写真があります。最新のボタンをクリックしてください」という警告が表示されます。

誰かが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

関連する問題