setAttribute("class", "buttonDelete");
а classList.add("buttonDelete");
tr.appendChild(button2)
) нужно в самую последнюю очередь, то есть после изменения содержимого button2.innerHTML = 'Delete');
removeCallback
.button2.addEventListener('click', removeCallback)
tr.appendChild(button2)
Совместимость типов в TypeScript основывается на структурной типизации. Структурная типизация — это способ выявления отношений типов на основании исключительно состава их членов. Этот подход отличается от номинативной типизации. Посмотрим на следующий код:
interface Named { name: string; } class Person { name: string; } let p: Named; // Все подходит, поскольку используется структурная система типов p = new Person();
myOnSubmitFunction
<form onsubmit="myOnSubmitFunction">
event
event.preventDefault()
function myOnSubmitFunction (event) {
if (some === any) {
event.preventDefault()
}
}
loading = true
. loading = false
.element.nextElementSibling.nextElementSibling // Соседний через один
div
. А то потом встаёт вопрос производительности, ты смотришь на страницу, а там 1500 DOM узлов и треть из них дивы, которые можно было бы выбросить.$dropDowns.forEach((el) => {
el.addEventListener("click", () => {
const menu = el.querySelector('.dropdown_menu')
if (menu.classList.contains('active')) {
menu.classList.remove("active")
} else {
menu.classList.add("active")
$dropMenus.forEach((element) => {
if (element === menu) {
return
} else {
element.classList.remove("active")
}
});
}
});
});