2016-10-24 3 views
0

Таблица содержит скрытую строку шаблона и нулевые или более видимые строки данных. В конце таблицы есть кнопка добавления, которая shoud добавляет новую пустую строку в конец таблицы.Как добавить строку после последней строки в таблице

Я попытался

function addVariablesRow() { 
    var t = document.getElementById("reportVariablesTable"); 
    var rows = t.getElementsByTagName("tr"); 
    var r = rows[rows.length - 1]; 
    var x = rows[1].cloneNode(true); 
    x.style.display = ""; 
    r.parentNode.insertBefore(x, r); 
} 

, но он добавляет грести до последней строки в таблице. Как добавить строку после последней строки в таблицу?

Приложение ASP.NET MVC4, загрузочный модуль 3 модальный, jquery, jquery-ui.

HTML:

<div class="modal" id="reportVariables" tabindex="-1" role="dialog" aria-labelledby="reportVariablesLabel"> 
    <div class="modal-dialog modal-lg" role="document"> 
     <div class="modal-content"> 
      <div class="modal-body"> 
       <table class="table table-condensed table-striped" id="reportVariablesTable"> 
        <thead> 
         <tr> 
          <th>Name</th> 
          <th>Value</th> 
          <th>Calculate</th> 
         </tr> 
        </thead> 
        <tbody> 
         <!-- first row is hidden add template row --> 
         <tr style='display:none'> 
          <td> 
           <input type="text" name="name"> 
          </td> 

          <td> 
           <textarea name="valuetostore"></textarea> 
          </td> 

          <td> 
           <select class="totaltype-select" id="totaltype" name="totaltype"> 
            <option value=""></option> 
            <option value="Sum">Summary</option> 
            <option value="Lowest">Smallest</option> 
            <option value="Highest">Biggers</option> 
           </select> 
          </td> 
         </tr> 

         <!-- other are visible data rows --> 
         <tr> 
          <td> 
           <input type="text" name="name" value="variable1"> 
          </td> 

          <td> 
           <textarea name="valuetostore">a-b</textarea> 
          </td> 

          <td> 
           <select class="totaltype-select" id="totaltype" name="totaltype"> 
            <option value=""></option> 
            <option value="Sum">Summary</option> 
            <option value="Lowest" selected>Smallest</option> 
            <option value="Highest">Biggers</option> 
           </select> 
          </td> 
         </tr> 
         ... remaining rows 
        </tbody> 
       </table> 
        <button onclick="addVariablesRow();">+</button> 

      </div> 
     </div> 
    </div> 
</div> 

Update

Я определяется клонировать шаблон строки, который является первым в теле и сделать новую строку видны. Я пробовал:

function addVariablesRow() { 
     var $t = $("#reportVariablesTable"); 
     var $row = $($t.find("tr")[1]); 
     var r = $row.clone(); 
     r[0].style.display = ""; 
     r.appendTo($t); 
} 

Является ли это лучший код? Может быть, это bettet, чтобы найти строку шаблона как первую в теле?

ответ

1

Как вы упомянули JQuery вариант, вы можете использовать что-то вроде этого:

function addVariablesRow() { 
    var $t = $("#reportVariablesTable"); 
    var $row = $t.find("tbody tr").first(); 
    var $newRow = $row.clone(); 
    $newRow.appendTo($t).show(); 
} 
+0

Мне нужна новая строка empy. Для этого, вероятно, скрытая строка шаблона должна быть клонирована и сделана видимой. Вы клонируете код последней строкой, которая может содержать данные. Я обновил вопрос с кодом, созданным на основе вашего ответа. Это лучший стиль кода? – Andrus

+0

@ Andrus Проверьте мои изменения! – Santi

+0

Первая строка - это заголовок таблицы. Это редактирование, вероятно, клонирует заголовок таблицы. как получить первую строку в теле таблицы? – Andrus

1
var t = document.getElementById("reportVariablesTable"); 
var row = document.createElement("tr") 
t.appendChild(row) 
+0

Это добавляет пустую строку. Как добавить строку из шаблона, чтобы она содержала элементы ввода, выбора и talbeare из шаблона. – Andrus

2

Это может быть сделано с помощью JQuery, как это,

$('#reportVariablesTable tr:last').after('<tr>...</tr><tr>...</tr>');

Вы можете включать в себя что-нибудь в пределах метода после того, как() до тех пор, как это правильный HTML, в том числе несколько строк, как в приведенном выше примере ,

+0

Как получить html из скрытой строки шаблона (первая строка в таблице) и добавить этот html, чтобы новая строка содержала элементы ввода данных? – Andrus

0
$('#reportVariablesTable').find('tbody:last') 
.append($('#rep‌​ortVariablesTable') 
.‌​find('tbody:first').clone())‌​; 
+0

Это добавляет пустую строку. Как получить html из строки шаблона (первая строка в таблице) и добавить строку, содержащую элементы ввода из нее? – Andrus

+0

в основном вы хотите копию до конца. затем добавьте результат выбора первого tr. Я отредактировал ответ, чтобы включить то, что вы запросили. – yopez83

+1

Обновленный код не добавляет ни одной строки. Вероятно, 'clone()' отсутствует – Andrus

Смежные вопросы