2011-04-14 3 views
0

AJAX에서 텍스트의 몇 가지 paragrahs로 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를 반환하기 위해 자바 스크립트 경고()를 사용하면 첫 번째 단락 만 포함됩니다. 나는 다른 노드를 찾는 시도했다 그러나 이것은 단지 하나의 노드가 말한다 : 텍스트 노드 :

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

답변

0

당신은 paper_desc를 사용 [0] .firstChild.nodeValue

paper_desc [0] 노드의 집합이다가 br 노드. 이 집합의 첫 번째 자식 만 가져 오므로 첫 번째 텍스트 만 가져옵니다.

alert() 호출은 paper_desc 노드가 하나만 있음을 나타내며 내부에있는 노드 수는 표시하지 않습니다.

또한 paper_nodes [1]를 사용하는 것이 이상하지만 XML에 두 번째 노드가 있는지 여부와 실제로 대상을 지정 하려는지 여부는 알 수 없습니다.

+0

"summary_div.innerHTML + ="의 실제 값을 사용하는 곳에서 사용하고있는 것은 ... "paper_desc [0]은 텍스트 노드와 br 노드"이지만 paper_desc [0]은 노드 집합입니다. 그러나 paper_nodes [i] .getElementsByTagName ("paper_desc [0] .firstChild.nodeValue +" "). 길이는 단 하나라고 말 했나요? 내가 오해 했습니까? 내가 paper_nodes [1]을 사용했던 곳에서 저는 약간의 부정 행위를했습니다. 모든 노드는 같은 범주에서 왔으므로 첫 번째 노드에서 범주를 가져 와서 범주 헤더를 만듭니다. – SylanderXS

+0

좋아, 다시 내 코드를 통해 읽은 후에, 물론, 당신이 옳았다는 것이 밝혀졌습니다. paper_desc 아래에는 실제로 7 개의 childNodes가 있습니다 (텍스트 및 br의 경우). paper_desc의 모든 자식 노드를 단일 값으로 결합하는 빠르고 쉬운 방법이 있습니까? 아니면 모두 반복해야합니까? – SylanderXS

+0

결국 나는 paper_desc 컨텐츠를 에 싸서 완벽하게 작동했습니다. 내가 잃어버린 paper_dec [i] 아래에 노드가 더 있었다는 표시가이 문제를 일으켰습니다. 고마워. – SylanderXS

관련 문제