отображать данные динамически из данных JSON, используя Javascript или Jquery - PullRequest
1 голос
/ 08 апреля 2020

Как я могу отобразить данные JSON (родитель-ребенок-внук) в трех отдельных элементах div, используя jQuery или Javascript?

![enter image description here

Согласно моему текущему коду, это не динамически c показывает только JSON данные в отдельных делениях, но в правом div отображаются все дочерние элементы (это также показывает правнука)

Если пользователь нажимает на метку grandchild (если у нее есть дочерний элемент), тогда метка grandchild должна отображаться в среднем элементе, а их дочерний элемент (правнук) должен отображаться в правом элементе.

Я хочу сделать все метки динамическими c, чтобы при нажатии пользователем любой метки метка отображалась в среднем элементе, а его дочерние элементы - в правом.

var data = [{
    "id": 1,
    "parent": 0,
    "name": "Parent"
  },
  {
    "id": 2,
    "parent": 1,
    "name": "Child"
  },
  {
    "id": 3,
    "parent": 1,
    "name": "Child"
  },
  {
    "id": 4,
    "parent": 2,
    "name": "GrandChild"
  },
  {
    "id": 5,
    "parent": 2,
    "name": "GrandChild"
  },
  {
    "id": 6,
    "parent": 3,
    "name": "GrandChild"
  },
  {
    "id": 7,
    "parent": 3,
    "name": "GrandChild"
  },
  {
    "id": 8,
    "parent": 5,
    "name": "Great-GrandChild"
  },
  {
    "id": 9,
    "parent": 5,
    "name": "Great-GrandChild"
  },
  {
    "id": 10,
    "parent": 6,
    "name": "Great-GrandChild"
  },
  {
    "id": 11,
    "parent": 7,
    "name": "Great-GrandChild"
  }
]

let getById = (id, data) => {
  let r = data.find(x => x.id === id);
  if (r == undefined) {
    return false;
  }
  return r;
}

let add = (row, data) => {
  let class_name;
  for (i = 0; i < 1; i++) {
    if (row.id == "1")
      class_name = "left_side";
    else {
      let parent = getById(row.id, data);
      if (parent.parent == "1") {
        class_name = "middle_side";
      } else {
        class_name = "right_side";
        if (getById(parent.parent, data) === false)
          return false;
      }

    }
    $("." + class_name).append(`<span id="${row.id}" class="label">${row.name}</span>`);
  }
}

$.each(data, (index, value) => {
  if (add(value, data) === false) {
    return;
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="w-100 d-flex">
  <div class="eq_width align-self-center left_side">
    <span id="1" class="label">Parent</span>
  </div>
  <div class="vl"></div>
  <div class="eq_width align-self-center middle_side">
    <span id="2" class="label">Child</span>
    <span id="3" class="label">Child</span>
  </div>
  <div class="vl"></div>
  <div class="eq_width align-self-center right_side">
    <span id="4" class="label">GrandChild</span>
    <span id="5" class="label">GrandChild</span>
    <span id="6" class="label">GrandChild</span>
    <span id="7" class="label">GrandChild</span>
  </div>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...