Связь структурированных данных и 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, время: 08:29. |