Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.12.2017, 17:27
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Связь структурированных данных и 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)

подскажите, как удалять в подобных случаях?
Ответить с цитированием
  #2 (permalink)  
Старый 13.12.2017, 17:36
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Luca,
wM.delete( e.currentTarget )
Ответить с цитированием
  #3 (permalink)  
Старый 13.12.2017, 18:06
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Сообщение от рони Посмотреть сообщение
Luca,
wM.delete( e.currentTarget )
вопрос в другом: "как удалить узел в исходной струтуре данных obj, те как удалить obj.first, но используя ссылку из wM или другой структуры? значения должны формироваться в цикле, без obj.first и тп Или запоминать все уровни, а потом удалять [${obj}].[${first}], но это как-то не гуд, имхо..."
Ответить с цитированием
  #4 (permalink)  
Старый 13.12.2017, 19:02
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Luca,
не понимаю, ждите специалистов.
Ответить с цитированием
  #5 (permalink)  
Старый 13.12.2017, 19:44
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Сообщение от рони Посмотреть сообщение
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 получать ссылку на объект, который надо удалить.
структура может быть любой: массивы, объекты...
надеюсь понятно объяснил
Ответить с цитированием
  #6 (permalink)  
Старый 13.12.2017, 19:56
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

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>

Последний раз редактировалось рони, 13.12.2017 в 19:58.
Ответить с цитированием
  #7 (permalink)  
Старый 13.12.2017, 20:04
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

сложность в том, что структура может быть сложнее, например
let msgs = {

   msg1: {
       submsg1: { },
       submsg2: { },
       submsg3: { }
   }

}

те уровень вложенности может быть любой и посему ссылаться divs[key] не правильно - вот я о чём.
ссылку при обходе всех элементов я могу, но как потом, имея ссылку удалить объект?
Ответить с цитированием
  #8 (permalink)  
Старый 13.12.2017, 20:08
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Сообщение от Luca
те уровень вложенности может быть любой
а что это меняет в предложенном коде пост №6 ?
Ответить с цитированием
  #9 (permalink)  
Старый 13.12.2017, 20:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,123

Luca,
если у вас есть только msgs и submsg, то вам нужен обход всего дерева обьекта, а если только msg1 и submsg, тогда достаточно предложенного выше
Ответить с цитированием
  #10 (permalink)  
Старый 13.12.2017, 20:17
Аспирант
Отправить личное сообщение для Luca Посмотреть профиль Найти все сообщения от Luca
 
Регистрация: 20.06.2017
Сообщений: 69

Сообщение от рони Посмотреть сообщение
а что это меняет в предложенном коде пост №6 ?
надо тогда запоминать что-то типа
delete msgs.msg1.submsg1.subsubmsg1

рекурсивно проходя по дереву легко получить ссылку на текущий объект, но... можно, конечно, делать рекурсивные вызовы с передачей текущего поддерева...
вопрос в том: можно ли удалить объект произволной вложенности имея ссылку на этот объект, не имея ссылки на родителские объекты?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблон Jade как источник структурированных данных Max Power Node.JS 2 23.01.2016 05:07
Связь данных сервиса и вьюхи Alex_D181 Angular.js 1 29.07.2015 09:01
обновление данных в dom skrudjmakdak Общие вопросы Javascript 4 09.11.2014 04:11
Обратная связь плагина с dom sotik jQuery 10 25.02.2013 09:52
Двойная Фильтрация данных таблицы David0707 Общие вопросы Javascript 0 19.03.2012 13:00