簡體   English   中英

javascript [node] .nodeValue字段的大小限制?

[英]Size limit to javascript [node].nodeValue field?

我正在通過AJAX調用接收XML數據。 標簽之一包含大量文本,大約4000-5000個字符。 在Firefox中,該字段在第3000個字符左右被截斷。 我在網上找到的大多數內容都表明,節點值的大小沒有限制,但是有時它取決於實現方式-沒有可靠的答案。

假設對nodeValue的大小沒有限制,是否有人對為什么會發生有任何建議? 有任何解決方法嗎?

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

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

值被截斷。

-如果我打印xmlHttp.responseText,則將打印所有數據。

檢查一下 它說:

“還要注意的重要一點是,盡管規范規定標簽之間無論有多少文本,都應全部位於一個文本節點中,但實際上並非總是如此。在Opera 7-9.2x和Mozilla / Netscape 6中+,如果文本大於特定的最大大小,則將其拆分為多個文本節點。這些文本節點在父元素的childNodes集合中將彼此相鄰。”

@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

我想出了什么,而不是針對單個節點:

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也可能是值得的。

@雷利

我對直接子代進行迭代的唯一原因是因為getElementsByTagName和getElementsById將返回層次結構中更遠的節點。 更好地解釋為例:

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

如果我說fooTag.getElementsByTagName(“ bar”),即使我只想要第二個(因為它是的唯一真正的孩子),它也會返回兩個s的數組。 我認為強制執行“僅搜索我的直系孩子”的唯一方法是遍歷孩子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM