Показать сообщение отдельно
  #6 (permalink)  
Старый 05.11.2016, 18:08
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Lemme, ага, я тоже так могу.)
Например для второй части вопроса:
function parse(root){
  var rootArray = [];
  var map = new Map( 
    Array.from( 
      root.querySelectorAll('[data-id]'), 
      element => [
        element, 
        { 
          name: element.dataset.id, 
          children: [] 
        }
      ]
    ) 
  );

  for(let [element, object] of map){
    while((element = element.parentNode) !== root && !map.has(element)); 
    if(element === root) rootArray.push(object);
    else map.get(element).children.push(object);
  }
  return 'id' in root.dataset ? [{ 
    name: root.dataset.id, 
    children: rootArray
  }] : rootArray;
}
__________________
29375, 35

Последний раз редактировалось Aetae, 05.11.2016 в 21:53.
Ответить с цитированием