2013-07-25 3 views
2

У меня есть таблица с кнопками в клетках, например, так:JQuery - удалить родительскую строку элемента

<table> 
    <tr> 
     <td>information</td> 
     <td> 
      <button onclick="function(id, this)">Text</button> 
     </td> 
    </tr> 
</table> 

Функция вызывается при нажатии кнопки делает некоторые АЯКС вещи, и если это успешно, то вся строка, где кнопка должна быть удалена из DOM. (Это функция удаления;)

Однако я не могу заставить jQuery удалить правильную строку. Я использовал $('#id').parent().parent().remove();, поскольку я думал, что он пойдет: button -> cell -> row, но он просто удаляет первую строку таблицы ?! Куда бы я ни проиграл? :(

+0

Ваша кнопка не имеет идентификатора, поэтому jQuery не может найти его. Используйте '$ (this)' в вашей функции вместо '$ ('# id')'. А также «функция» - это плохое имя для функции. – putvande

+0

Спасибо! Это сделал трюк :). Моя функция на самом деле называется «deleteShift», и таблица ничего не выглядит - я просто сделал это для упрощения :) – Fireworm

+0

Хорошо, я понял свою ошибку. Вы, ребята, были права сказать, что «это» лучше, однако, кнопка выглядит так: ' ', поэтому вы видите, что у него есть идентификатор, но я допустил ошибку, заставив все кнопки иметь один и тот же, что заставило jQuery удалить первый он нашел. – Fireworm

ответ

9

http://jsfiddle.net/ZnX5J/

<table> 
    <tr> 
     <td>information</td> 
     <td> 
      <button onclick="removeRow(this)">Text</button> 
     </td> 
    </tr> 
    <tr> 
     <td>blah</td> 
     <td> 
      <button onclick="removeRow(this)">Text</button> 
     </td> 
    </tr> 
</table> 

JavaScript

removeRow = function(el) { 
    $(el).parents("tr").remove()  
} 
3

.closest() может сделать это легко -

$(this).closest('tr').remove(); 

Вы можете удалить встроенный OnClick и обрабатывать щелчок, как это -

$('button').on('click',function(){ 
    $(this).closest('tr').remove(); 
}); 

Demo ------>http://jsfiddle.net/2nJYe/

0

вы сделали это правильно, но нет идентификатора, если вы это сделаете, он будет работать, как вы ожидали,

$(this).parent().parent().remove(); 

но использование .closest() рекомендуется в такой ситуации.

$(this).closest("tr").remove(); 
Смежные вопросы