2017-01-02 9 views
0

AJAX要求は、このようなノードを含むXMLを返すの要素にクラスを追加する:私はすべてのリスト項目に追加するループ処理AJAX応答

var folderContent = ''; 
var data = xhttp.responseXML; 
var folders = data.getElementsByTagName("directory"); 
for (var i = 0; i < folders.length; i++) { 
        folderContent += folders[i].childNodes[0].nodeValue; 
       } 
document.getElementById('folders').innerHTML = folderContent; 

<root> 
    <directory><li onclick=myFunc()>stuff</li></directory> 
    ... 
</root> 

そしてコードはこのようにそれを処理します1つのクラス(すべての要素と同じ)。 JavaScriptを使ってどうすればいいですか?

ありがとうございました。

答えて

0

それは働いた:

var ul = document.createElement('ul'); 
var li; 

for (var i = 0; i < folders.length; i++) { 
    li = document.createElement('li'); 
    li.innerHTML = folders[i].childNodes[0].nodeValue; 
    li.setAttribute('onclick', 'Toggle(this, true)'); 
    li.setAttribute('class', 'first-level'); 
    ul.appendChild(li); 
    } 
document.getElementById('folders').innerHTML = ul.innerHTML; 
0

setAttributeを使用して、属性を追加(または変更)することができます。また、常に定義されていない要素ノードでnodeValueを呼び出していることに気付きました。 liノードをfolderContentに追加する場合は、folderContentに追加する前に文字列にシリアル化する必要があります。

var folderContent = ''; 
    var data = xhttp.responseXML; 
    var folders = data.getElementsByTagName("directory"); 
    var serializer = new XMLSerializer(); 
    var node; 
    for (var i = 0; i < folders.length; i++) { 
     node=folders[i].childNodes[0]; 
     node.setAttribute('class', 'your-class')//sets class attribute to li node 
     folderContent += serializer.serializeToString(node);//serialize li node before and appends it to folderContent 
    } 

希望します。

+0

を、私はノード上*のsetAttribute *を起動することができませんでした。また、XMLSerializerはC#クラスで、私はJSだけで作業する必要がありました。あなたの提案は正しいアプローチに私を導いたが、ありがとう。 –

+0

@ElijahDollin私はあなたの問題を修正できることをうれしく思っていますが、このコンテキストではXMLSerializerはJSオブジェクトであり、C#とは何の関係もないことに注意してください。 – pipeur10