2010-12-10 88 views
3

我正在通過AJAX調用接收XML數據。其中一個標籤有大量的文字,大約有4000-5000個字符。在Firefox中,該字段正在截斷第3000個字符。我在網上發現的大多數所有內容都表示節點值大小沒有限制,但有時候它依賴於實現 - 沒有可靠的答案。大小限制爲javascript [node] .nodeValue字段?

有沒有人有這可能是爲什麼發生的任何建議,假設有對的nodeValue的大小沒有限制?任何解決方法如果是這樣?

<test> 
    <foo>very long string...</foo> 
</test> 

value = testTag.getElementsByTagName("foo").item(0).firstChild.nodeValue; 

值被截斷。

- 如果我打印xmlHttp.responseText,全部來自被打印的數據的。

回答

4

檢查this。它說:

「同樣重要的是要注意的是,儘管規範說,無論標籤之間存在多少文本,它應該都在一個文本節點中,實際上情況並非總是如此。 9.2x和Mozilla/Netscape 6+,如果文本大於特定的最大大小,它將被拆分爲多個文本節點。這些文本節點將在父元素的childNodes集合中彼此相鄰。「

+0

偉大的文章 - 這是解決方案! – Jmoney38 2010-12-10 18:32:33

+0

http://www.howtocreate.co.uk/也是一個很棒的網站,我想補充一下。 – KooiInc 2010-12-10 18:38:34

1

@Kooilnc對在Firefox文本節點是正確的,4K限制。

你可以解決它通過這樣做:

function getNodeText(xmlNode) { 
    if(!xmlNode) return ''; 
    if(typeof(xmlNode.textContent) != "undefined") return xmlNode.textContent; 
    return xmlNode.firstChild.nodeValue; 
} 

text = getNodeText(document.getElementsByTagName("div").item(0)); 
alert(text.length); 

看到它在這裏的行動:http://jsfiddle.net/Bkemk/2/

功能從這裏借:http://www.quirksmode.org/dom/tests/textnodesize.html

0

我想出代替針對單個節點:

function getDataOfImmediateChild(parentTag, subTagName) 
{ 
    var val = ""; 
    var listOfChildTextNodes; 
    var directChildren = parentTag.childNodes; 

    for (m=0; m < directChildren.length; m++) 
    { 
     if (directChildren[m].nodeName == subTagName) 
     { 
      /* Found the tag, extract its text value */ 
      listOfChildTextNodes = directChildren[m].childNodes; 
      for (n=0; n < listOfChildTextNodes.length; n++) 
      { 
       if (typeof listOfChildTextNodes[n] == "TextNode") 
       val += listOfChildTextNodes[n].nodeValue; 
      } 
     } 
    } 
    return val; 

確保listOfChildTextNodes [n]元素是TextNode也是值得的。

0

@Ryley

我做一個迭代通過直接兒童唯一原因是的getElementsByTagName和getElementsById將返回是越往下層次的節點。作爲一個例子更好地解釋:

<foo> 
    <bar> 
    <zoo> 
     <bar>-</bar> 
    </zoo>  
    <bar></bar> 
</zoo> 

如果我說fooTag.getElementsByTagName(「巴」),這將同時返回的數組S,即使我只想要第二(因爲它是唯一真正的孩子)。我可以考慮強制執行這個「只搜索我的直接孩子」的唯一方法就是迭代孩子。

+0

這與你的問題似乎並不相關。我同意getElementsByTagName按您描述的方式行事。 – Ryley 2010-12-10 20:33:36