Связь структурированных данных и DOM
Здравствуйте.
console.clear();
const obj = {
first: {
text: "child",
}
}
let root = document.createElement('div')
root.innerHTML = obj.first.text
let wM = new WeakMap()
wM.set(root, obj.first)
root.addEventListener("click", (e)=> { e.currentTarget.classList.add("dn")
delete wM.get( e.currentTarget ) // здесь не удаляет
console.log( wM.get( e.currentTarget ) )
console.log( obj.first === wM.get( e.currentTarget ) )
}
)
document.body.appendChild(root)
подскажите, как удалять в подобных случаях? |
Luca,
wM.delete( e.currentTarget ) |
Цитата:
|
Luca,
не понимаю, ждите специалистов. |
Цитата:
например есть объект с тремя подобъектаим
let threeDivs = {
div1:{
text: "it's div1"
},
div2:{
text: "it's div2"
},
div3:{
text: "it's div3"
},
}
далее, в цикле, мы проходим по структуре
for(let elem in threeDivs){
let div = document.createElement("div")
div.innerHTML = elem.text
div.addEventListener("click", (e)=>{
e.currentTarget.remove()
// здесь же надо предусмотреть удаление elem
})
}
те надо удалить дом узел и соответствущий объект из структуры, я попытался через WeakMap связать данные, чтобы по e.currentTarget получать ссылку на объект, который надо удалить. структура может быть любой: массивы, объекты... надеюсь понятно объяснил |
Luca,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<div id="slider"></div>
<script>
"use strict"
let threeDivs = {
div1:{
text: "it's div1"
},
div2:{
text: "it's div2"
},
div3:{
text: "it's div3"
}
}
Object.keys(threeDivs).forEach(function(elem) {
let div = document.createElement("div")
div.innerHTML = threeDivs[elem].text;
div.addEventListener("click", (e)=>{
document.body.removeChild(div);
delete threeDivs[elem];
console.log(threeDivs)
});
document.body.appendChild(div)
})
</script>
</body>
</html>
|
сложность в том, что структура может быть сложнее, например
let msgs = {
msg1: {
submsg1: { },
submsg2: { },
submsg3: { }
}
}
те уровень вложенности может быть любой и посему ссылаться divs[key] не правильно - вот я о чём. ссылку при обходе всех элементов я могу, но как потом, имея ссылку удалить объект? |
Цитата:
|
Luca,
если у вас есть только msgs и submsg, то вам нужен обход всего дерева обьекта, а если только msg1 и submsg, тогда достаточно предложенного выше |
Цитата:
delete msgs.msg1.submsg1.subsubmsg1 рекурсивно проходя по дереву легко получить ссылку на текущий объект, но... можно, конечно, делать рекурсивные вызовы с передачей текущего поддерева... вопрос в том: можно ли удалить объект произволной вложенности имея ссылку на этот объект, не имея ссылки на родителские объекты? |
| Часовой пояс GMT +3, время: 15:12. |