[英]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.