Я не знаю ни о каких ограничениях размера браузера, но если вы назначите строку длиннее 65536, Chrome разделит ее на множество elem.childNodes
, поэтому вам, возможно, придется циклически проходить по этим узлам и объединять их.
Запустите приведенное ниже в Chrome Dev Tools. Он создает строку длиной 160 тыс., Но 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
не разбивает содержимое на множество узлов: (FF версия 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 я могу создать innerHTML-childNodes[0]
длиной 167 772 160, вернувшись к i < 24
выше. Но где-то выше этой длины возникает ошибка InternalError: allocation size overflow
.