2015-08-11 25 views
5

Mam stronę z tabelą. W tbody wyświetlam dane przez angularjs. W thead mam taki sam wiersz jak w tbody, ale jest on pusty, a gdy wypełniłem pole wejściowe i click gdzieś (utrata ostrości), jeden wiersz dodaje do mojej tabeli (thead). I muszę ustawić flagę na wypełnionym wierszu, tak jak - rowAdded = true, ponieważ bez tego klikam na wejście jednego wiersza i dodaje wiersz. I jeszcze jeden problem polega na tym, że wiersze dodają do końca table. to wszystko działa na skrypcie:Jak wstawić nowe wiersze w jakiejś pozycji w tabeli

var tbody = $('.table-timesheet thead'); 
tbody.on('blur', ':text', function() { 
    var tr = $(this).closest('tr'), 
     notEmpty = $(':text', tr).filter(function() { 
      return $.trim($(this).val()) != ''; 
     }).length; 
    if (notEmpty) { 
     $('.note-input').css('width', '88%').css('float', 'left'); 
     $('.timesheet-delete-button').css('display', 'block'); 
     //tr.clone(true).appendTo(tbody).find(':text').val(''); 
     insRow(); 
    } 
}); 

function deleteRow(row) { 
    var i = row.parentNode.parentNode.rowIndex; 
    document.getElementById('table-body').deleteRow(i); 
} 


function insRow() { 
    var table = document.getElementById('table-body'); 
    var newRow = table.rows[1].cloneNode(true); 
    var len = table.rows.length; 
    newRow.cells[0].innerHTML = len; 

    var inp1 = newRow.cells[1].getElementsByTagName('input')[0]; 
    inp1.id += len; 
    inp1.value = ''; 
    var inp2 = newRow.cells[2].getElementsByTagName('input')[0]; 
    inp2.id += len; 
    inp2.value = ''; 
    table.appendChild(newRow); 
} 

Jest mój przykład w plunker: http://plnkr.co/edit/rcnwv0Ru8Hmy7Jrf9b1C?p=preview

+0

Jest Trudno jednoznacznie odczytać twoje pytanie i myślę, że to naprawdę wiele pytań w jednym. Czy próbujesz dodać nowy wiersz do nagłówka tabeli (thead)? Jeśli tak, dlaczego nie chcesz używać tbody? Zazwyczaj thead służy do informowania o tym, jakie kolumny będą miały. Cała ogólna funkcjonalność dodawania wiersza wydaje się być zepsuta, ponieważ za każdym razem dodam informacje w jednej z kolumn, tworząc nowy wiersz. – IfTrue

+0

Demo nie zawiera w sobie kodu kątowego. Wygląda na to, że robisz o wiele za dużo manipulacji DOM, a także polegasz na document.ready. Podejście jest nieprawidłowe w przypadku pracy w aplikacji kątowej. Powinieneś aktualizować model danych, aby wygenerować widok, a nie robić własnych wstawień wierszy. Proszę zaktualizować wersję demo tak, aby przynajmniej ładował się do kontrolera, jeśli potrzebujesz dodatkowej pomocy – charlietfl

+0

@HUSTLIN powinieneś dodać znacznik angular.js również z nim –

Odpowiedz

1

Czy tego szukasz

function insRow(ind){ 
 
    var table = document.getElementById('table-body'); 
 
    var newRow = table.rows[1].cloneNode(true); 
 
    var len = table.rows.length; 
 
    newRow.cells[0].innerHTML = ind!==undefined ? ind : len; 
 
    if(ind!==undefined) 
 
     $(table).find('tr:eq('+ind+')').before(newRow); 
 
    else table.appendChild(newRow); 
 
} 
 

 
insRow(2);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="table-body"> 
 
    <tbody> 
 
    <tr><td>1</td></tr> 
 
    <tr><td>2</td></tr> 
 
    <tr><td>3</td></tr> 
 
    </tbody> 
 
</table>