Динамическое добавление столбцов в таблицу jQuery не работает

Я пытаюсь сгенерировать и добавить столбцы в таблицу динамически с помощью jQuery, и хотя в консоли javascript ошибок не обнаружено, столбцы не отображаются.

Процессы того, что я хочу делать

  get JSON for the table -> generate  the HTML -> remove existing columns to update -> append the new data to the table

## Ожидаемый сгенерированный HTML

  <table id = "buy_order" class = "table">
     <thead>
      <tr>
        <th scope = "col">Price of buy orders(BTC)</th>
        <th scope = "col">Amount of buy orders(<%=@currency_id%>)</th>
       </tr>
      </thead>
     <tbody>
       <tr>
        <td class = "table-default">
         <div class = "parent">
          <div class = "overlay bg-danger" style = "width:10%">&nbsp;</div>
           0.003
        </div>
        </td>
        <td class = "table-default">1</td>
      </tr>
     </tbody>
 </table>

JSON

  [["0.003",1]]

первая - цена, вторая - сумма

javascript

 <script>
           $(function(){
           setInterval(function(){
            $(function() {
               $.getJSON("http://localhost:3000/buys/order_book?currency_id=ryu", function(data){
                    var buy_order = "";
                    for (i = 0; i < data.length; i++) {
                       buy_order += "<tr>\n";
                        for (j = 0; j < data[i].length; j++) {
                           width =data[i][1]*10;
                            buy_order += $("<td>").addClass("table-default");
                            buy_order += $("<div>").addClass("parent")+$(($("<div>").addClass("overlay bg-success"))).css("width",width+"%")+"&nbsp;"+"</div>"+data[i][j]+"</div>";
                            buy_order += "</td>\n";
                         }
                      buy_order += "</tr>\n";
                       console.info(buy_order)
                    }
                     buy_order=$(buy_order).hide().fadeIn(1000);
                    $("#buy_order").empty();
                   $("#buy_order").append(buy_order);
                });
            });
            },5000);
          });
     </script>

благодарить

Ответ этого json-ответа [["0.003", 1]] исправлен или будут изменения?

Smit Raval 23.03.2018 08:09

он может быть изменен или без изменений

Ryu Nishida 23.03.2018 08:14

Не могли бы вы изменить свой полный JSON. Также вы можете изменить формат JSON?

Smit Raval 23.03.2018 08:16

Я могу, но какую структуру JSON вы хотите, чтобы я предоставил? это как {["цена", 0,003, "сумма": 1]}

Ryu Nishida 23.03.2018 08:18

Что вы можете сделать, так это создать массив, который дает следующий результат. ([0] => {"price" => 0,003, "amount" => 1}, [1] => {"price" => 0,006, "amount" => 2})

Smit Raval 23.03.2018 08:23

Что-то вроде этого с ключом и значением в виде массива. Если вы можете создать этот формат в JSON, вы можете просто показать значение, не используя два цикла for. :)

Smit Raval 23.03.2018 08:24
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
92
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

вы должны изменить

$("#buy_order").append(buy_order);

в:

$("#buy_order").find("tbody").append(buy_order);

Не думаю, что проблема в том, что мой код плохо работает

Ryu Nishida 23.03.2018 08:26
Ответ принят как подходящий

Попробуйте это -

 <script>
               $(function(){
               setInterval(function(){
                $(function() {
                   $.getJSON("http://localhost:3000/buys/order_book?currency_id=ryu", function(data){
                        var buy_order = "";
                        for (i = 0; i < data.length; i++) {
                           buy_order += "<tr>\n";
                            for (j = 0; j < data[i].length; j++) {
                               width =data[i][1]*10;
                                buy_order += "<td class='table-default'>";
                                buy_order += "<div class='parent'><div class='overlay bg-success' style='width:"+width+"%;'&nbsp;</div>"+data[i][j]+"</div>";
                                buy_order += "</td>\n";
                             }
                          buy_order += "</tr>\n";
                           console.info(buy_order)
                        }
                         buy_order=$(buy_order).hide().fadeIn(1000);
                        $("#buy_order").empty();
                       $("#buy_order").append(buy_order);
                    });
                });
                },5000);
              });
         </script>

Спасибо, это сработало, я не ожидал, что проблема "была", когда я впервые обработал строку HTML-тегов в jQuery, но я также хочу работать <div class = 'parent'> <div class = 'overlay bg-success 'style =' width: "+ width +"%; '& nbsp; </div> "+ data [i] [j] +" </div> "один раз в цикле, я имею в виду второй раз цикла, я не хочу работать с той частью, которую я указал выше, какое для этого лучшее решение?

Ryu Nishida 23.03.2018 08:30

Еще одно изменение, которое вы могли бы сделать, - использовать .html () вместо .empty () + .append (), то есть $("#buy_order").html(buy_order); вместо $("#buy_order").empty(); $("#buy_order").append(buy_order);.

kanwal019 23.03.2018 08:43

Проверь это.

$(function(){
           setInterval(function(){            
               $.getJSON("http://localhost:3000/buys/order_book?currency_id=ryu", function(data){
                    var buy_order = "";
					//var data='[["0.003",11]]';
					//data=JSON.parse(data);
					//console.info(data);
                    for (i = 0; i < data.length; i++) {
						  buy_order += "<tr>\n";
						   for (j = 0; j < data[i].length; j++) {
							   buy_order+='<td class = "table-default"><div class = "parent">';
							   buy_order+='<div class = "overlay bg-danger" style = "width:10%">&nbsp;</div>';
							   buy_order+=data[i][j];
							   buy_order+='</div></td>';
						    }
                         
                      buy_order += "</tr>\n";
                      
                    }
                   buy_order=$(buy_order).hide().fadeIn(1000);
                   $("#amount_body").empty();
                   $("#amount_body").html(buy_order);
                });            
           },5000);
          });
<table id = "buy_order" class = "table">
     <thead>
      <tr>
        <th scope = "col">Price of buy orders(BTC)</th>
        <th scope = "col">Amount of buy orders(<%=@currency_id%>)</th>
       </tr>
      </thead>
     <tbody id = "amount_body">
       <tr>
        <td class = "table-default">
         <div class = "parent">
          <div class = "overlay bg-danger" style = "width:10%">&nbsp;</div>
           0.003
        </div>
        </td>
        <td class = "table-default">1</td>
      </tr>
     </tbody>
 </table>

Другие вопросы по теме