我编写了一个简单的程序,它采用2个textareas并将一个textarea的每一行与第二个textarea中的所有行组合在一起,我的浏览器在6000行后粉碎。 我的检查结果需要达到100,000行。
这是javascript代码:
function go() {
var lines1 = $('#text1').val().split(/\n/);
var lines2 = $('#text2').val().split(/\n/);
var textarea1 = [];
var textarea2 = [];
var textarea3 = [];
for (var i = 0; i < lines1.length; i++) {
if (/\S/.test(lines1[i])) {
textarea1.push($.trim(lines1[i]));
}
}
for (var j = 0; j < lines2.length; j++) {
if (/\S/.test(lines2[j])) {
textarea2.push($.trim(lines2[j]));
}
}
for (var k = 0; k < lines1.length; k++) {
for (var q = 0; q < lines2.length; q++) {
textarea3.push($.trim(lines1[k] + ' ' + lines2[q]));
var msg = textarea3.join("\n");
document.getElementById('text3').value = msg;
}
}
}
这是HTML:
<textarea name="textarea" id="text1"></textarea>
<textarea name="textarea" id="text2"></textarea>
<input type="button" value="GO!" onclick="go()">
<br />
<textarea name="textarea" id="text3"></textarea>
答案 0 :(得分:2)
问题在于此代码
for (var k=0; k < lines1.length ; k++) {
for (var q=0; q < lines2.length ; q++) {
textarea3.push($.trim(lines1[k] + ' ' + lines2[q]));
var msg = textarea3.join("\n");
document.getElementById('text3').value = msg;
}
}
如果textarea1中有1K行,testarea2中有1K,那么您将修改DOM(通过更改textarea3的值)1M次,这是疯狂的。因此,不是每次尝试在循环外执行它而更新DOM。
答案 1 :(得分:0)
尝试在textarea中提供maxlength属性,然后检查我认为它会起作用。 的 强>
并在你的for循环中首先将所有内容存储在一个变量中然后在for循环中将其写入textarea而不是每次在for循环中分配DOM值。