Как избежать удаления первой строки при добавлении и удалении строк таблицы HTML с использованием DOM? - PullRequest
3 голосов
/ 24 декабря 2011

Ниже скрипка из другого вопроса. Он содержит вывод динамического добавления и удаления строк таблицы html с использованием javascript. Код в скрипке дал мне то, что я хочу. Но у меня есть одна проблема с кодом. При удалении строк одна за другой, первая строка также удаляется. Как скрыть кнопку удаления только в первом ряду?

http://jsfiddle.net/7AeDQ/

HTML

<div id="POItablediv">
    <input type="button" id="addPOIbutton" value="Add POIs"/><br/><br/>
    <table id="POITable" border="1">
        <tr>
            <td>POI</td>
            <td>Latitude</td>
            <td>Longitude</td>
            <td>Delete?</td>
            <td>Add Rows?</td>
        </tr>
        <tr>
            <td>1</td>
            <td><input size=25 type="text" id="latbox"/></td>
            <td><input size=25 type="text" id="lngbox" readonly=true/></td>
            <td><input type="button" id="delPOIbutton" value="Delete" onclick="deleteRow(this)"/></td>
            <td><input type="button" id="addmorePOIbutton" value="Add More POIs" onclick="insRow()"/></td>
        </tr>
    </table>

JAVASCRIPT

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


function insRow()
{
    console.log( 'hi');
    var x=document.getElementById('POITable');
    var new_row = x.rows[1].cloneNode(true);
    var len = x.rows.length;
    new_row.cells[0].innerHTML = len;

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

Выше приведен код в скрипке. Надеюсь, это поможет, если вы не можете загрузить скрипку. Это иногда случается.

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Это выглядит элегантно.

Скрыть первое:

$("table tr:eq(1) td:eq(3) input").css("display","none");

Затем показать вновь созданный tr:

var noRows = $("#POITable tr").length-1;
$("table tr:eq("+noRows+") td:eq(3) input").css("display","block");

Fiddle: http://jsfiddle.net/Lh8KL/

2 голосов
/ 24 декабря 2011

Просто добавьте этот оператор:

x.rows[1].cells[3].children[0].style.display = x.rows.length > 2 ? '' : 'none';

Получает ссылку на элемент input в первой строке третьей ячейки и скрывает ее, если есть только одна строка.

Обновленная скрипка: http://jsfiddle.net/7AeDQ/23/

1 голос
/ 24 декабря 2011

просто добавьте следующую строку в скрипт

    new_row.cells[3].getElementsByTagName('input')[0].removeAttribute('style');

Плюс небольшая модификация в HTML (добавьте отключено к true в первой кнопке удаления)

   <td><input type="button" id="delPOIbutton" value="Delete" onclick="deleteRow(this)" style="display:none"/></td>

Проверка скрипки: http://jsfiddle.net/7AeDQ/25/

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