Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Таблица циклом (https://javascript.ru/forum/misc/72136-tablica-ciklom.html)

SpaceAlarm 11.01.2018 00:21

Таблица циклом
 
Ребята, нужна помощь в таблице, а именно по созданию таблицы циклом
Есть входящие параметры, [{…}, {…}, {…}, {…}]
1:{"Login1"}
2:{"Login2"}
3:{"Login3"}
4:{"Login4"}
5: length 4

Нужно создать в таблицу, с двумя полями, в первую колонку мы пишем логин, во вторую заполняем логины, после того как приходят новые данные мы обновляем таблицу, как это организовать? :help:

рони 11.01.2018 08:47

SpaceAlarm,
:-?

SpaceAlarm 11.01.2018 13:40

Цитата:

Сообщение от рони (Сообщение 474757)
SpaceAlarm,
:-?

Что это значит?)

ksa 11.01.2018 13:43

Цитата:

Сообщение от SpaceAlarm
Что это значит?

Предположу, что это недоумение...

Цитата:

НЕДОУМЕ́НИЕ, недоумения, ср.
Состояние нерешимости, сомнение, колебание вследствие непонимания, неясности.

рони 11.01.2018 14:09

SpaceAlarm,
1. в чём проблема построить таблицу.
2.
Цитата:

Сообщение от SpaceAlarm
Есть входящие параметры, [{…}, {…}, {…}, {…}]
1:{"Login1"}
2:{"Login2"}
3:{"Login3"}
4:{"Login4"}
5: length 4

из чего и что построить?
структура данных и таблицы неизвестна.
пример нужен обьект в js и таблица в html.
3.
Цитата:

Сообщение от SpaceAlarm
приходят новые данные мы обновляем таблицу, как это организовать?

что обновить? всю таблицу? или строки добавить изменить

Dilettante_Pro 11.01.2018 14:13

Вот еще пример
Цитата:

Сообщение от SpaceAlarm
Нужно создать в таблицу, с двумя полями, в первую колонку мы пишем логин, во вторую заполняем логины

Многократно прочел и ниасилил...

SpaceAlarm 11.01.2018 16:31

Цитата:

Сообщение от рони (Сообщение 474794)
SpaceAlarm,
1. в чём проблема построить таблицу.
2.
из чего и что построить?
структура данных и таблицы неизвестна.
пример нужен обьект в js и таблица в html.
3.
что обновить? всю таблицу? или строки добавить изменить

Вот структура: http://prntscr.com/hyzkpf приходящих данных

Таблица:
<!DOCTYPE HTML>
<html>

<head>
    <meta charset="utf-8">
</head>

<body>
    <table border="1">
        <tr>
            <th>Группа</th>
            <th>Логин</th>
        </tr>
        <tr>
            <td>Администратор</td>
            <td>test1</td>
        </tr>
        <tr>
            <td>Пользователь</td>
            <td>test2</td>
        </tr>
        <tr>
            <td>Пользователь</td>
            <td>test3</td>
        </tr>
        <tr>
            <td>Пользователь</td>
            <td>test4</td>
        </tr>
    </table>
</body>

</html>

3. Как приходят новые данные, обновлять в таблице их

рони 11.01.2018 16:46

SpaceAlarm,
по прежнему недостаточно данных, может кто-то другой догадается ...

Dilettante_Pro 11.01.2018 16:54

SpaceAlarm,
Цитата:

Сообщение от SpaceAlarm
Вот структура: http://prntscr.com/hyzkpf приходящих данных

Здорово... И кто знает, кто в этих данных - группа, администратор, пользователь...
Куда и каким образом приходят эти данные?

SpaceAlarm 11.01.2018 17:14

Цитата:

Сообщение от рони (Сообщение 474839)
SpaceAlarm,
по прежнему недостаточно данных, может кто-то другой догадается ...

Чего именно не достаточно?

SpaceAlarm 11.01.2018 17:19

Цитата:

Сообщение от Dilettante_Pro (Сообщение 474841)
SpaceAlarm,

Здорово... И кто знает, кто в этих данных - группа, администратор, пользователь...
Куда и каким образом приходят эти данные?

в поле группы, нужно отправлять client_type, но это поле не так важно, данные на клиент (frontend) приходят с backend сервера (nodejs) через socketio

Dilettante_Pro 11.01.2018 17:44

SpaceAlarm,
Цитата:

Сообщение от SpaceAlarm
в поле группы, нужно отправлять client_type

В вашем примере client_type: 0 во всех строчках
Что это такое?
Цитата:

Сообщение от SpaceAlarm
но это поле не так важно

В какую строку таблицы html писать эти данные?
Цитата:

Сообщение от SpaceAlarm
данные на клиент (frontend) приходят с backend сервера (nodejs) через socketio

И куда попадают?

рони 11.01.2018 17:46

SpaceAlarm,
создать таблицу из массива это 10 строк, знать бы ещё что вам нужно.
смотрите примеры, может сами справитесь
http://javascript.ru/forum/showthrea...350#post444350
https://javascript.ru/forum/misc/355...t-tablicu.html

SpaceAlarm 11.01.2018 18:47

Цитата:

Сообщение от Dilettante_Pro (Сообщение 474850)
SpaceAlarm,

В вашем примере client_type: 0 во всех строчках
Что это такое?

В какую строку таблицы html писать эти данные?

И куда попадают?

client_type попадает в поле Группа, client_nickname нужно выводить во второе поле, с названием Логин

рони 11.01.2018 20:39

SpaceAlarm,

Вопросы есть?

SpaceAlarm 11.01.2018 20:48

Цитата:

Сообщение от рони (Сообщение 474871)
SpaceAlarm,

Вопросы есть?

Конечно, как мне это организовать в коде? помогите, ибо так не сделаю

рони 11.01.2018 21:17

Создание таблицы из массива обьектов
 
SpaceAlarm,

от вас требовались строки 26 - 29 :( :( :(

<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">

 td{
 text-align: center;
 border: solid 1px #0000FF;
 }
 table {
border-collapse: collapse;
border: 1px solid #0000FF;
width: 300px;

}



 </style>
<script>
window.addEventListener("DOMContentLoaded", function() {

  var data = [{client_nickname:"rrrrrrr", client_type:1}, {client_nickname:"yyyyyy", client_type:0}, {client_nickname:"yyy", client_type:0}, {client_nickname:"nnn", client_type:"x"}];
  var type = {0 : "Пользователь", 1 : "Администратор"};
  var thead = ["Группа","Логин"];
  var filter = ["client_type", "client_nickname"];

  function createTable(obj) {
    var table = document.createElement("table");
    if (obj.data && obj.filter && obj.type) {
      obj.data.forEach(function(content, indx) {
        var tr = table.insertRow(indx);
        obj.filter.forEach(function(key, i) {
          var td = tr.insertCell(i);
          td.textContent = i ? content[key] : obj.type[content[key]] ? obj.type[content[key]] : "кто это?";
        });
      });
    }
    if (obj.thead) {
      var thead = document.createElement("thead");
      table.appendChild(thead);
      var tr = thead.insertRow(0);
      obj.thead.forEach(function(title) {
        var th = document.createElement("th");
        th.textContent = title;
        tr.appendChild(th);
      });
    }
    return table;
  }
  var table = createTable({thead:thead, data:data, filter:filter, type:type});

  var parent = document.body;
  parent.appendChild(table);
});
</script>
</head>

<body>

</body>
</html>

SpaceAlarm 11.01.2018 21:37

Спасибо большое, так я же вам дал структуру в скриншоте, приходящего объекта

рони 11.01.2018 21:52

Цитата:

Сообщение от SpaceAlarm
Спасибо большое, так я же вам дал структуру в скриншоте, приходящего объекта

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

SpaceAlarm 11.01.2018 22:25

Цитата:

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

еще вот есть не большой вопрос, есть код

socket.on('test', function(data) {
	  console.log(data.text.length);
		let num = data.text.length;
		for (var i = 0; i < num; i++) {
			$('#num').append('<tr><td>ID:</td><td>'+data.text[i].client_ids+'</td></tr>');
		}
    });

Сейчас приходят данные с сервера, но они на странице добавляются один за одним, http://prntscr.com/hz4z49
Смысл того что, допустим есть 3 клиента, они с идами, 1,2,3 с сервера приходят эти иды каждую секунду, в место того чтобы они обновлялись просто, но они просто добавляются с низу, как это решить?

рони 11.01.2018 22:36

SpaceAlarm,
запомнить и не добавлять больше, если ничего больше не изменяется, если будет изменение нужно знать что вы хотите изменить

SpaceAlarm 11.01.2018 22:42

Цитата:

Сообщение от рони (Сообщение 474897)
SpaceAlarm,
запомнить и не добавлять больше, если ничего больше не изменяется, если будет изменение нужно знать что вы хотите изменить

Так а как это в коде то организовать?

рони 11.01.2018 22:44

SpaceAlarm,
var out = {};
socket.on("test", function(data) {
  console.log(data.text.length);
  var num = data.text.length;
  for (var i = 0; i < num; i++) {
    var id = data.text[i].client_ids;
    if (!out[id]) {
      var tr = $("<tr><td>ID:</td><td>" + id + "</td></tr>").appendTo("#num");
      out[id] = tr;
    }
  }
});

SpaceAlarm 11.01.2018 23:00

Цитата:

Сообщение от рони (Сообщение 474899)
SpaceAlarm,
var out = {};
socket.on("test", function(data) {
  console.log(data.text.length);
  var num = data.text.length;
  for (var i = 0; i < num; i++) {
    var id = data.text[i].client_ids;
    if (!out[id]) {
      var tr = $("<tr><td>ID:</td><td>" + id + "</td></tr>").appendTo("#num");
      out[id] = tr;
    }
  }
});

Объясните пожалуйста ход схемы, что бы я понял, суть фикса

рони 11.01.2018 23:13

SpaceAlarm,
if (!out[id]) если нет в обьекте такого свойства, создаём строку

SpaceAlarm 11.01.2018 23:20

Цитата:

Сообщение от рони (Сообщение 474901)
SpaceAlarm,
if (!out[id]) если нет в обьекте такого свойства, создаём строку

А как заменить Чисто на js без использования jquery
var tr = $("<tr><td>ID:</td><td>" + id + "</td></tr>").appendTo("#num");

рони 11.01.2018 23:27

SpaceAlarm,
var tr = document.querySelector("#num tbody").insertAdjacentHTML("beforeEnd", "<tr><td>ID:</td><td>" + id + "</td></tr>");

SpaceAlarm 11.01.2018 23:35

Цитата:

Сообщение от рони (Сообщение 474903)
SpaceAlarm,
var tr = document.querySelector("#num tbody").insertAdjacentHTML("beforeEnd", "<tr><td>ID:</td><td>" + id + "</td></tr>");

https://jsfiddle.net/gbLvgyng/4/ что то не срабатывает

рони 11.01.2018 23:46

SpaceAlarm,
важны детали, телепаты но пасаран
<table>
  <tbody id="num">
      <tr id="channel_list" class="danger"></tr>
 </tbody>
</table>
<script>
   var id = 2;
   var tbody = document.querySelector("#num");
   tbody.insertAdjacentHTML("beforeEnd", "<tr><td>ID:</td><td>" + id + "</td></tr>");

</script>

SpaceAlarm 12.01.2018 01:36

Спасибо

рони 12.01.2018 02:05

SpaceAlarm,
лучше так, если tr нужно, а не просто вставка

<table>
  <tbody id="num">
      <tr id="channel_list" class="danger"></tr>
 </tbody>
</table>
<script>
   var id = 2;
   var tbody = document.querySelector("#num");
   var tr = tbody.insertRow(tbody.rows.length);
   tr.insertAdjacentHTML("beforeEnd", "<td>ID:</td><td>" + id + "</td>");

</script>

SpaceAlarm 12.01.2018 17:38

Цитата:

Сообщение от рони (Сообщение 474899)
SpaceAlarm,
var out = {};
socket.on("test", function(data) {
  console.log(data.text.length);
  var num = data.text.length;
  for (var i = 0; i < num; i++) {
    var id = data.text[i].client_ids;
    if (!out[id]) {
      var tr = $("<tr><td>ID:</td><td>" + id + "</td></tr>").appendTo("#num");
      out[id] = tr;
    }
  }
});

Все равно не обновляет а добавляет, http://prntscr.com/hzhozj

var list = {};
    socket.on("lists", function(data) {
        console.log(data.text);
        let length = data.text.length;
        for (var i = 0; i < length; i++) {
            let login = data.text[i].nickname;
            if (!list[login]) {
				let tbody = document.querySelector("#num");
				let tr = tbody.insertAdjacentHTML('beforeEnd', '<tr><td>User: '+i+'</td><td>' + login + '</td></tr>');
                list[login] = tr;
            }
        }
    });

рони 12.01.2018 17:43

Цитата:

Сообщение от SpaceAlarm
Все равно не обновляет

Цитата:

Сообщение от рони
лучше так, если tr нужно, а не просто вставка

:-?

рони 12.01.2018 17:47

SpaceAlarm,
var list = {};
    socket.on("lists", function(data) {
        console.log(data.text);
        let length = data.text.length;
        for (var i = 0; i < length; i++) {
            let login = data.text[i].nickname;
            if (!list[login]) {
        let tbody = document.querySelector("#num");
        let tr = tbody.insertRow(tbody.rows.length);
        tr.insertAdjacentHTML("beforeEnd", '<td>User: '+i+'</td><td>' + login + '</td>');
        list[login] = tr;
            }
        }
    });

SpaceAlarm 12.01.2018 20:14

Огромное спасибо


Часовой пояс GMT +3, время: 01:15.