У меня есть функция, которая добавляет текст из текстовой области в div, но моя проблема в том, что для добавления более 500 строк требуется много времени. Он должен работать через секунду, когда я добавляю 3000 или 4000 строк, но я не знаю, что я делаю неправильно. Вот моя функция Add():
function add(){
arraySearchTerms = document.getElementById("searchTerms").value.split('\n');
for (var i = 0; i < arraySearchTerms.length; i++) {
document.getElementById("keywords").innerHTML += '<div style="padding: 6px;border-bottom: #b5aeae; border-bottom-style: solid;border-bottom-width: 1px;"><span id="term'+ i +'">' + arraySearchTerms[i] + "</span><span style='float: right;'><img src='Red_Cross.png' height='15' width='11'/></span></div>";
}
}
Спасибо за помощь. Изменение: Это изображение? Он только весит 2k.
Каждый раз, когда вы назначаете innerHTML
, браузер должен очистить и повторно проанализировать новую строку HTML. Это относительно дорогостоящая операция по сравнению с большинством, особенно когда в ней много элементов. Попробуйте сначала придумать строку, и только присвойте элементу innerHTML
в конце:
function add(){
arraySearchTerms = document.getElementById("searchTerms").value.split('\n');
let newKeywordHtmlStr = '';
for (var i = 0; i < arraySearchTerms.length; i++) {
newKeywordHtmlStr += '<div style="padding: 6px;border-bottom: #b5aeae; border-bottom-style: solid;border-bottom-width: 1px;"><span id="term'+ i +'">' + arraySearchTerms[i] + "</span><span style='float: right;'><img src='Red_Cross.png' height='15' width='11'/></span></div>";
}
document.getElementById("keywords").innerHTML += newKeywordHtmlStr;
}
Вы также должны рассмотреть использование классов, а не придавать каждому элементу длинный встроенный атрибут style
, а также избегать неявного создания глобальных переменных:
function add(){
const arraySearchTerms = document.getElementById("searchTerms").value.split('\n');
let newKeywordHtmlStr = '';
for (var i = 0; i < arraySearchTerms.length; i++) {
newKeywordHtmlStr += '<div class="keyword"><span id="term'+ i +'">' + arraySearchTerms[i] + "</span><span><img src='Red_Cross.png' height='15' width='11'/></span></div>";
}
document.getElementById("keywords").innerHTML += newKeywordHtmlStr;
}
CSS:
.keyword {
padding: 6px;
border-bottom: #b5aeae;
border-bottom-style: solid;
border-bottom-width: 1px;
}
.keyword > span:nth-child(2) {
float: right;
}
В примечаниях к комментариям, если источник arraySearchTerms
недостоверен, и вы хотите дополнительно исключить HTML-теги из arraySearchTerms
чтобы убедиться, что он не вызывает никаких проблем, вы можете вызвать замену на каждый элемент перед вставкой в строку HTML:
newKeywordHtmlStr += '<div class="keyword"><span id="term'+ i +'">' + arraySearchTerms[i].replace(/<(?:.|\n)*?>/gm, '') + "</span><span><img src='Red_Cross.png' height='15' width='11'/></span></div>";