我不知道任何浏览器特定的大小限制,但如果您分配的字符串长度超过 65536,Chrome 会将其拆分为多个 elem.childNodes,因此您可能需要遍历这些节点并将它们连接起来。
在 Chrome 开发工具中运行以下片段。它构造了一个 160k 的字符串,但 theDivElement.childNodes[0] 被剪裁为 65536 个字符。
var longString = '1234567890';
for (var i = 0; i < 14; ++i) {
longString = longString + longString;
}
console.log('The length of our long string: ' + longString.length);
var elem = document.createElement('div');
elem.innerHTML = longString;
var innerHtmlValue = elem.childNodes[0].nodeValue;
console.log('The length as innerHTML-childNodes[0]: ' + innerHtmlValue.length);
console.log('Num child nodes: ' + elem.childNodes.length);
结果:(Chrome 版本 39.0.2171.95(64 位),Linux Mint 17)
The length of our long string: 163840
The length as innerHTML-childNodes[0]: 65536
Num child nodes: 3
但在 Firefox 中,innerHTML 不会将内容拆分为多个节点:(Firefox 版本 34.0,Linux Mint 17)
"The length of our long string: 163840"
"The length as innerHTML-childNodes[0]: 163840"
"Num child nodes: 1"
因此,您需要考虑到不同的浏览器处理 childNodes 的方式不同,并且可能会遍历所有子节点并进行连接。 (我注意到了这一点,因为我尝试使用 innerHTML 来取消转义 > 100k HTML 编码的字符串。)
事实上,在 Firefox 中,我可以通过循环到上面的 i < 24 来创建长度为 167 772 160 的 innerHTML-childNodes[0]。但是在这个长度之上的某个地方,有一个InternalError: allocation size overflow 错误。