let selectField = document.createElement('div'); //создание контейнера
for(i = 9; i >= 0; i--){ //генерация дочерних div
let buttons = document.createElement('div');
buttons.setAttribute("onclick", `removeField("${selectField}")`);
selectField.append(buttons);
}
function removeField(selectField){
console.log(selectField); //[object HTMLDivElement]
}
в консоли только
[object HTMLDivElement]
как правильно передать ссылку на контейнер selectField с возможностью дальнейшего его удаления (вместе с детьми) со страницы ремувом" внутри функции removeField…?
пробовал заново получать через id, сиблингами и чайлдами… не помогло…
let selectField = document.createElement('div');
selectField.className = 'container';
document.body.appendChild(selectField);
for(i = 9; i >= 0; i--) {
let buttons = document.createElement('div');
selectField.append(buttons);
// можно так
buttons.setAttribute("onclick", `removeField(selectField)`);
// или так
buttons.onclick = function () {
selectField.remove();
}
}
function removeField(selectField){
selectField.remove();
}
Не сработает если этот код внутри функции и переменная не глобальная.
function removeField(selectField) {
selectField.remove();
}
(function() {
let selectField = document.createElement('div');
selectField.className = 'container';
document.body.appendChild(selectField);
for (i = 9; i >= 0; i--) {
let buttons = document.createElement('button');
selectField.append(buttons);
// можно так
buttons.setAttribute("onclick", `removeField(selectField)`);
}
})()
Ну и смысла так делать нет, это нужно если прямо в HTML писать, а в JS проще сразу второй вариант + надежнее, IDE и линтеры смогут подсказать если что-то не так (опечатка в имени, …).
А кто тут говорит, что ТС будет использовать замыкание ? Он скинул код в таком виде, в которому он будет его использовать, я показал решение его кода и также альтернативу. К тому же этот код будет работать и в теле страницы и отдельным файлов js )