document.body.innerHTML = `тут очень большое дерево`
если создавать очень большое дерево, то ИМХО присвоение(=
) в innerHTML
быстрее чем создание дерева с помощью JS. а вот как быть с наращиванием (+=
) ?
один вариант
document.body.innerHTML += `<span>что-то простое, одноуровневое</span>`
другой
document.body.innerHTML += `ещё одно очень большое дерево`
этот небольшой тест показал, что "наращивание" создаёт все элементы заново
// html - переводит Raw строку в строку.
// а так же даёт подсветку html в VSCode с помощью плагина
// lit-html https://marketplace.visualstudio.com/items?itemName=bierner.lit-html
let html = (tsa, ...args) => String.raw(tsa, ...args);
// --
const { counterConteiner, counter } = Counter();
document.body.innerHTML = '';
document.body.appendChild(counterConteiner);
// --
void function () {
let i = 0;
class TestEl extends HTMLElement {
constructor() {
//@ts-ignore
super(...arguments);
this.id = '' + i++;
counter[this.id] = 0;
}
connectedCallback() {
counter[this.id]++;
this.innerHTML = `counter[${this.id}] ${counter[this.id]}`;
}
}
customElements.define('test-el', TestEl);
}();
// -----------------
// --
let conteiner = document.createElement('div');
document.body.appendChild(conteiner);
conteiner.innerHTML += html `<test-el> </test-el><br>`;
conteiner.innerHTML += html `<span>-,-</span><br>`;
conteiner.innerHTML += html `<span>-,-</span><br>`;
// --
let test = conteiner.getElementsByTagName('test-el')[0];
test.remove();
conteiner.appendChild(test);
// --
// -----------------
function Counter() {
let counter = new Proxy({}, {
set(target, key, value, receiver) {
try {
if (key in target)
counterRender(key, value);
else {
counterRender();
counterRender(key, value);
}
target[key] = value;
}
catch (_e) {
return false;
}
return true;
}
});
let counterConteiner = document.createElement('table');
let counterRender = (key, value) => {
if (value == 0)
return;
if (key)
counterConteiner.innerHTML += html `
<tr>
<td>test-el id="${key}"</td>
<td>counts ${value}</td>
</tr>`;
else
counterConteiner.innerHTML += html `
<tr>
<td> </td>
<td> </td>
</tr>`;
};
return { counterConteiner, counter };
}
//# sourceMappingURL=index.js.map
что странно, если учесть существование таких элементов как HTMLTemplateElement
и DocumentFragment
. (наверное, просто так положено по стандарту, и по тому же стандарту, для наращивания нужно использовать insertAdjacentHTML
доки)
не смотря на приведённый тест, вопрос ещё актуален.
что быстрее: присвоение innerHTML
или создание через JS
?
и тот же вопрос, желательно с примерами, но в контексте ShadowRoot
?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть массив со значениями, необходимо обойти dom дерево и заполнить содержимое элементов c классом child-elem элементами из массиваПолучается...
Мне кажется нехватает информации в разделе "поделиться" пункты отправить на email(другу\себе)Как это сделать? возможно ли отправить не открывая...
есть файл, в котором лежит массив из объектовНеобходимо его обработать так, чтобы массив передался в переменную