Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2016, 01:54
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Помогите с деревом
Помогите пожалуйста, уже два дня мучаюсь, ничего не выходит.

Есть такой код, он выводится из бд.
data-id - это id записи.
Нужно получить из этого, вот такой массив. arr[0] {21,22,23}



<li class="dd-item" data-id="21">
	<div class="dd-handle">Раздел 1</div>
	<ul class="dd-list">
		<li class="dd-item" data-id="22">
			<div class="dd-handle">Раздел 1.1</div>
		</li>
		<li class="dd-item" data-id="23">
			<div class="dd-handle">Раздел 1.2</div>
		</li>
	</ul>
</li>

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

Array.from( document.querySelectorAll('[data-id]'), element => +element.dataset.id )
__________________
29375, 35

Последний раз редактировалось Aetae, 05.11.2016 в 02:16.
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2016, 02:28
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Помогите пожалуйста
А можно как-то вывести дочерние элементы ?
как-то так,
arr[0] (21, children[0] (22,23) )
и т.д.
arr[1] (24, children[0] (25,26) )
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2016, 04:27
Аватар для Lemme
Профессор
Отправить личное сообщение для Lemme Посмотреть профиль Найти все сообщения от Lemme
 
Регистрация: 15.07.2015
Сообщений: 511

Aetae, человек обфускатор =)
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2016, 10:41
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

Сообщение от Antonqq
arr[0] {21,22,23}
Сообщение от Antonqq
arr[0] (21, children[0] (22,23) )
интересно как это на js будет выглядеть?
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2016, 18:08
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,576

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.
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2016, 20:04
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Не работает
Может я не правильно передаю параметр..
alert (parse('.list'));

Ничего не возвращает.
.list - блок ul
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2016, 20:09
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,576

Это вам не jquery, тут элемент требуется.)
parse( document.querySelector('.list') );
__________________
29375, 35
Ответить с цитированием
  #9 (permalink)  
Старый 05.11.2016, 20:21
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Все работает, спасибо большое
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
2-ой select грузит [object Object] помогите! espltd AJAX и COMET 1 06.08.2014 00:01
Помогите с тестированием fsb-k Работа 8 29.03.2013 11:20
Помогите соединить две функции bratkovsky Общие вопросы Javascript 0 30.07.2012 23:53
Помогите с replace! faforty Общие вопросы Javascript 2 28.08.2011 13:10
Помогите! Многоуровневые вкладки! sergeeeeee Элементы интерфейса 2 02.08.2010 23:50