rowIndex возвращает -1 - PullRequest
       5

rowIndex возвращает -1

1 голос
/ 23 января 2012

Я использую скрипт greasemonkey и обновляю таблицу, используя следующий код. Я приложил изображение стола. Но когда я нажимаю на удаление, rowIndex возвращает -1 для всех строк. Я не понимаю, почему он возвращает -1.

table = document.getElementById( 'keys-table' );
if ( !table ) return;
table.innerHTML = '';


// header
row = document.createElement( 'tr' );
th = document.createElement( 'th' );
th.innerHTML = "Group"; row.appendChild( th );
th = document.createElement( 'th' );
th.innerHTML = "Key"; row.appendChild( th );
th = document.createElement( 'th' );
th.innerHTML = " "; row.appendChild( th );
table.appendChild( row );

// keys
for ( i = 0 ; i < keys.length ; i++ ) {
    row = document.createElement( 'tr' );
    td = document.createElement( 'td' );
    td.innerHTML = keys[i][0];
    row.appendChild( td );
    td = document.createElement( 'td' );
    td.innerHTML = keys[i][1];
    row.appendChild( td );
    td = document.createElement( 'td' );

    button = document.createElement( 'input' );
    button.type = 'button';
    button.value = 'Delete';
    button.addEventListener( "click", function(event) {
            DeleteKey( event.target.parentNode.parentNode.rowIndex,event.target);
        }, false );
    td.appendChild( button );
    row.appendChild( td );

    table.appendChild( row );
}

enter image description here

Ответы [ 2 ]

4 голосов
/ 23 января 2012

Элементы tr хотят быть в элементе <tbody>.

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

table.innerHTML = '';

Если вы убедитесь, что исходная таблица имеет <tbody>, затем сделайте это ...

table = document.getElementById( 'keys-table' );
if ( !table ) return;

var tbody = table.tBodies[0];
tbody.innerHTML = '';

... и затем добавьте строки к tbody, это будет работать.


Примечание, но я личнорекомендуем использовать методы DOM для удаления старых строк вместо innerHTML.

var tbody = table.tBodies[0];
while( tbody.firstChild )
    tbody.removeChild( tbody.firstChild );

или

var tbody = table.tBodies[0];
while( tbody.rows[0] )
    tbody.deleteRow( tbody.rows[0] );

Кажется более правильным.

2 голосов
/ 18 октября 2012

Хороший вопрос, и ответ "я не я" правильный, убедитесь, что добавили tbody к вашей таблице, а затем добавили свои строки к этому tbody.

...