2011-04-14 10 views
0

AJAXからのテキストのいくつかのパラグラフでdivを更新しようとすると、私は奇妙な問題を抱えています。私は最初の段落をcontainer_divするコンテンツをプッシュするとAJAXが段落に切り捨てられる

<root> 
<paper id="23"> 
    <paper_id>23</paper_id> 
    <paper_title>title</paper_title> 
    <paper_desc> 
     First paragraph of desc 
     <br/> 
     <br/> 
     Second paragraph of desc 
     <br/> 
     <br/> 
     Third paragraph of desc 
     <br/> 
    </paper_desc> 
    <paper_time>45</paper_time> 
    <user_real_name>Bob Student</user_real_name> 
    <user_id>2322</user_id> 
    <category>Languages</category> 
</paper> 
... 

されています。ここでは

  var receivePapers = getXmlHttpRequestObject(); 
     function get_papers(myCat){ 
      if (receivePapers.readyState == 4 || receivePapers.readyState == 0) { 
       receivePapers.open("GET", 'http://server/path/tocode/file.php?get_papers=1&student_id=1&category=' + myCat, true); 
       receivePapers.onreadystatechange = handlereceivePapers; 
       receivePapers.send(null); 
      } 
     } 

     function handlereceivePapers() { 
      if (receivePapers.readyState == 4) { 
       var container_div = document.getElementById('paper_container'); 
       var xmldoc = receivePapers.responseXML; 
       var paper_nodes = xmldoc.getElementsByTagName("paper"); 
       var n_papers = paper_nodes.length; 
       // Clear the whole container div. 
       container_div.innerHTML = ""; 
       container_div.innerHTML = "<table class='categoryHeader' width='100%'><tr><th class ='categoryHeader' width='80%' ><br/>&nbsp;" + paper_nodes[1].getElementsByTagName("category")[0].firstChild.nodeValue + "</br>&nbsp;<br/><br/></th></tr>"; 
       container_div.innerHTML += "<tr><td>"; 
       for (i = 0; i < n_papers; i++) { 
        var paper_id = paper_nodes[i].getElementsByTagName("paper_id"); 
        var paper_title = paper_nodes[i].getElementsByTagName("paper_title"); 
        var paper_desc = paper_nodes[i].getElementsByTagName("paper_desc"); 
        var paper_time = paper_nodes[i].getElementsByTagName("paper_time"); 
        var user_real_name = paper_nodes[i].getElementsByTagName("user_real_name"); 
        var summary_div = document.createElement('div'); 
        summary_div.innerHTML += "<table class='paper'><tr><td class='paperLike' width=80px rowspan=2 valign='top'><div id='" + paper_id[0].firstChild.nodeValue + "'><a href='#' onclick=\"vote('" + paper_id[0].firstChild.nodeValue + "'); event.returnValue=false; return false;\"> <img src='images/Like.png' style='padding-top:5px' border='0' /></a></div></td><td><table width='100%'><tr><td class='paperTitle' style='background-color:white; text-align=left; '><a class='paperTitle' style='padding-left:0;' href='#" + paper_id[0].firstChild.nodeValue + "'>" + paper_title[0].firstChild.nodeValue + "</a></td><td class='paperName' style='margin-right:0; width:200px; background-color:white; text-align:right; vertical-align:text-top;'><span align='right' style='background-color:white; text-align:right; vertical-align:text-top; ' > " + user_real_name[0].firstChild.nodeValue + "</span></td></tr></table></td><td rowspan='2' class='paperLength' style='width:80px; text-align:right; padding-top:8px;' >" + paper_time[0].firstChild.nodeValue + " minutes</td></tr><tr><td class='paperDescription' align='left' colspan='1'>" + paper_desc[0].firstChild.nodeValue + "</td></tr></table>"; 
        container_div.appendChild(summary_div); 
       } 
       container_div.innerHTML += "</tr></td></table"; 
      } 
     } 

が返さなってきたXMLです:ここでは

は、私が使用している機能があります表示されます。 paper_descを返すためにJavascript警告()をスティックした場合、最初の段落のみが含まれます。私は、他のノードを探してみましたが、これは唯一の1ノードがあります言う:

alert(paper_nodes[i].getElementsByTagName("paper_desc").length); 

答えて

0

あなたはpaper_descを使用する[0]

paper_descを.firstChild.nodeValue [0]ノードの集合である:テキストノードとbrノード。このセットの最初の子のみを取得するので、最初のテキストのみを取得します。

alert()コールでは、paper_descノードが1つしかないことを示していますが、内部にあるノードの数ではありません。

私はpaper_nodes [1]を使ったことで奇妙なことに気がつきましたが、XMLに2番目のノードがあるかどうか、本当にそれをターゲットにしたいのかどうかはわかりません。

+0

「summary_div.innerHTML + =」の実際の値を使用する場所はこれです: "paper_desc [0]はテキストノードとbrノードですが、paper_desc [0]はノードの集合です。" paper_desc [i] .getElementsByTagName( "paper_desc [0] .firstChild.nodeValue +" ").lengthは1つしかないと言っていますか? または私は誤解しましたか? 私がpaper_nodes [1]を使用した場所で私はちょっと浮気していました。すべてのノードは同じカテゴリから来ているので、カテゴリヘッダを作成するために最初のノードからカテゴリを取得するだけです。 – SylanderXS

+0

私のコードをもう一度読んだら、あなたが正しいことはもちろん明らかです。 paper_descの下には実際に7つのchildNodesがあります(テキストとbrの場合)。 paper_descのすべての子ノードを単一の値に結合するためのすばやく簡単な方法はありますか、それらをすべて反復処理する必要はありますか? – SylanderXS

+0

最後に、私はそのpaper_descのコンテンツを<![CDATA [..]]>にラップし、物事は完全に機能しました。 paper_dec [i]の下に、欠けていたノードが増えたというあなたの指摘は、これにつながった。ありがとうございました。 – SylanderXS

関連する問題