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

时间:2010-12-10 16:49:02

标签: javascript ajax nodevalue

我正在通过AJAX调用接收XML数据。其中一个标签有大量文本,大约4000-5000个字符。在Firefox中,该字段在第3000个字符周围被截断。我在网上发现的大多数内容都表示节点值大小没有限制,但有时它依赖于实现 - 没有可靠的答案。

假设对nodeValue的大小没有限制,是否有人对此可能发生的原因有任何建议?有没有办法解决?

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

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

值被截断。

- 如果我打印xmlHttp.responseText,则会打印所有数据。

4 个答案:

答案 0 :(得分:4)

检查this。它说:

“另外需要注意的是,虽然规范说无论标签之间存在多少文本,但它都应该在一个文本节点中,实际情况并非总是如此。在Opera 7-9.2x和Mozilla中/ Netscape 6+,如果文本大于特定的最大大小,则将其拆分为多个文本节点。这些文本节点将在父元素的childNodes集合中彼此相邻。“

答案 1 :(得分: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

答案 2 :(得分: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可能是值得的。

答案 3 :(得分:0)

@Ryley

我对直接子节点进行迭代的唯一原因是因为getElementsByTagName和getElementsById将返回层次结构中更远的节点。更好地解释为一个例子:

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

如果我说fooTag.getElementsByTagName(“bar”),它将返回两个s的数组,即使我只想要第二个(因为它是唯一真正的孩子)。我能想到强制执行“只搜索我的直接孩子”的唯一方法是迭代孩子们。