2013-07-23 6 views
0

Я пытаюсь удалить определенную строку из таблицы с помощью javascript. То, как я пытаюсь сделать это сейчас, - это получить идентификатор текущей строки, нажав кнопку (кнопка удаления), а затем удалив строку. Проблема в том, что я не получаю текущий идентификатор строки в таблице. Если кто-то может помочь мне получить идентификатор текущей строки, когда пользователь нажимает кнопку «Удалить», я думаю, что могу сам решить остальные проблемы. БлагодаряУдаление определенной строки в таблице

/*The Javascript*/ 
function delete_row() {  
     alert('id goes here'); 
     //getElementById('row').innerHTML ='hello'; 
     //id.deleteRow(); 
     //var table = document.getElementByTagName('items_table'); 
     //var row = table.rows[index]; 
       //document.getElementByTagName('items_table').deleteRow(0); 
} 

/*The HTML of the Table*/ 
<table id="items_table"> 
    <tr id="row_1"> 
     <td> 
      <input type="text" value="item1"/> 
     </td> 
     <td> 
      <button onclick="delete_row();">X</button> 
     </td> 
    </tr> 
/* Five rows in this table... */ 
    <tr id="row_5"> 
     <td> 
      <input type="text" value="item5"/> 
     </td> 
     <td> 
      <button onclick="delete_row();">X</button> 
     </td> 
    </tr> 
</table> 
+0

С обработчиками событий, которые вы используете в настоящее время, вы просто не можете получить идентификатор. – Bergi

+0

Смотрите этот вопрос: http://stackoverflow.com/questions/1207939/adding-an-onclick-event-to-a-table-row – Alfie

ответ

5

Вы можете просто подняться на дерево, пока не найдете строку:

function delete_row(btn) { 
    var tr = btn; 
    while(tr && tr.nodeName != "TR") tr = tr.parentNode; 
    if(!tr) throw new Error("Failed to find the row, was the function called correctly?"); 
    tr.parentNode.removeChild(tr); // delete it 
} 

И:

<button onClick="delete_row(this);">X</button> 

this имеет важное значение, так как она обеспечивает ссылку на кнопку, которая была нажата, поэтому мы можем найти строку, в которой она находится.

+1

Хотя немного отличается, вот демо: http://jsfiddle.net/ gZEP8/ – Ian

+0

Спасибо за демонстрацию @Ian. Похоже, что единственное различие - это имя переменной, факт, что вы сразу же начинаете один шаг выше (это нормально), однако вы не проверяете условия ошибки (например, функцию, вызываемую чем-то не в строке, или без нее правильный аргумент) –

+0

Спасибо, сэр, что вы предложили здесь, просто, но эффективно. Спасибо! – user2569019

0

Не можете ли вы просто сменить <button onclick="delete_row();">X</button> на <button onclick="delete_row('row_5');">X</button> в каждой строке соответственно?

Ваш обработчик будет выглядеть следующим образом:

function delete_row(theID) {  
     alert(theID); 
} 
+0

hmmm, intresting, но что, если вы не знаете количество строк в таблице? – user2569019

+0

Вы уже присваиваете каждой строке ID? – Alfie

+0

Да, это правда, но я просто думал, что если вы не знаете количество строк в таблице, это может стать проблемой. Но спасибо за ваш ответ :) – user2569019

1

Проверьте этот код. Он был проверен и прекрасно выполнит вашу работу. :)

<script> 

function delete_row(me) {  
alert(me.parentNode.parentNode.id); 
} 
</script> 

<table id="items_table"> 
    <tr id="row_1"> 
     <td> 
      <input type="text" value="item1"/> 
     </td> 
     <td> 
      <button onclick="delete_row(this);">X</button> 
     </td> 
    </tr> 

    <tr id="row_5"> 
     <td> 
      <input type="text" value="item5"/> 
     </td> 
     <td> 
      <button onclick="delete_row(this);">X</button> 
     </td> 
    </tr> 
</table> 
+0

Ницца, спасибо, сэр. – user2569019

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