Противоположность добавления в эту таблицу, используя jquery

Мне нужно противоположность этой части кода:

if( $('#effort_<%= @project_task.id %>').length == 0 )
  $('#task_list').append('<tr><td><%= @project_task.project.project_number %> <%= @project_task.project.project_name %> - <%= @project_task.task_name %></td>' +
                         '<td><%= text_field :effort, :hours, :name => 'effort_' + @project_task.id.to_s, :id => 'effort_' + @project_task.id.to_s %></td>' +
                         '<td><%= link_to image_tag('icons/delete.png'), :method => :destroy, :remote => true %></td></tr>' );
  $('#effort_<%= @project_task.id.to_s %>').change( function() { submiteffort( this, <%= @project_task.id.to_s %>); } );

когда пользователь нажимает кнопку удаления, он должен удалить эту строку таблицы. Я знаю, что вы можете использовать.remove(), но я не уверен, как это использовать, так как я новичок в RoR.

4 ответа

Решение

Вы можете сделать что-то вроде этого:

$("#task_list a").live("click", function(event) {
  $(event.target).closest("tr").remove();
});

Убедитесь, что вы используете closest, parents вернет всех предков tr s, поэтому он может удалить больше узлов, чем необходимо, если у вас есть вложенные таблицы. closest это самый безопасный вариант.

Предполагая, что ваше удаление находится внутри tr для каждой строки, вам нужно сделать что-то вроде этого

если кнопка закрытия / изображение имеет класс close, то связать с ним событие следующим образом

$('close').live("click",function()
{
    $(this).parents("tr").remove();   //this here is referring to the button 
});

Вы можете использовать родительский метод (добавить несколько идентификаторов), чтобы указать на строку, которую хотите удалить, и затем использовать метод удаления, чтобы фактически удалить ее.

Вот базовый пример того, как вы хотите сделать. Я надеюсь, что вы не возражаете, но я раздели его до гола, но это должно дать вам хорошее представление о том, с чего начать.

JSFiddle: http://jsfiddle.net/saceh/1/

<button id="Add">Add Row</button>
<hr>
<table id="TaskList">
</table>

<script>
// RowId is not important, just used to show you that rows are dynamically added
var RowId = 0;

$("#Add").click(function (e) {
    $("#TaskList").append("<tr><td>" + RowId  + "</td><td><button id='Delete'>Delete</button></td></tr>");
    RowId++;
});

$("#Delete").click(function(e) {
   var Row = $(this).parents('tr');
   $(Row).remove(); 
});

При нажатии на кнопку "Удалить" он находит родительскую строку и удаляет ее, а "Добавить" делает нечто похожее на то, что вы делаете в данный момент.

Другие вопросы по тегам