2010-10-22 2 views
0

Я хотел бы, чтобы следующий скрипт переместил строку таблицы в начало таблицы. Однако я не могу понять, как ссылаться на идентификатор первой строки, поскольку идентификатор задается динамически, я пробовал row.insertAfter(row.first());, но он заставляет строку исчезать, а не перемещать ее. Любые идеи, как ссылаться на верхний ряд?Ссылка на верхнюю строку таблицы

$(".top").click(function(){ 
     var row = $(this).parents("tr:first"); 
     if ($(this).is(".top")) { 
      row.inserAfter(row.first()); 
     } else { 
      return false; 
     } 
    }); 


<tbody id="sortable"> 
    <tr id="row1"> 
    <td><a href="" class="top">Top</a></td> 
    </tr> 
    <tr id="row2"> 
    <td><a href="" class="top">Top</a></td> 
    </tr> 
    <tr id="row3"> 
    <td><a href="" class="top">Top</a></td> 
    </tr> 
</tbody> 

ответ

3

This works ...

$(".top").click(function() { 
    var thisRow = $(this).parent().parent(); 
    var firstRow = thisRow.parent().find("tr:first").not(thisRow); 
    thisRow.insertBefore(firstRow); 
}); 
+0

Josh, я пробовал это, но ничего не делаю. Теперь ничего не происходит. Строка остается там, где она есть. – Mohamad

+0

Я сделал предупреждение (firstRow), и в результате я get [object Object] – Mohamad

+0

@Mel Увы, вы правы, у меня была логическая ошибка в моем обход родителя. Проверьте обновление, я включил ссылка на живую демонстрацию, которая работает. –

1
$(".top").click(function(){ 
      var tr=this.parentNode.parentNode; 
    tr.parentNode.insertBefore(tr.parentNode.firstChild,tr); 
    tr.parentNode.removeChild(tr); 
} 
+0

'this.parentNode.firstChild === this' –

+0

' this.parentNode.parentNode.firstChild === ' –

+0

Aargh) В первом я пропустил, что .class используется не для , а теперь - не для ( – Bick

1

Вы хотите сделать что-то вроде этого?

$(".top").click(function(){ 
    var $this = $(this); // make a reference to the current element 
    $.ajax({ 
     url: 'your/ajax/url.php', 
     success: function(data) { 
      // do what you want with data, 
      // and then move the row on top 
      // of the table, like so 
      var row = $this.parents("tr"); 
      var first_row = row.parent().find('tr:first'); 
      if (row && first_row && row != first_row) { 
      row.insertBefore(first_row); 
      } 
     } 
    }); 
    return false; // stay on the page 
}); 

Проверить http://api.jquery.com/jQuery.ajax/ для получения дополнительной информации

+0

Он работает очень хорошо, только в моем реальном сценарии у меня есть вызов ajax в ссылке ... и теперь это больше не будет срабатывать:/ – Mohamad

+0

Вы можете использовать '$ (selector) .live ('click', function() {/*...*/}) ', чтобы связать метод с событием клика, как текущим, так и всеми будущими элементами, которые были добавлены на страницу, и, таким образом, сделать его постоянным. См. Http://api.jquery.com/live/ – ArtBIT

+0

Подождите, у вас есть вызов ajax, определенный в 'onclick'? Если это так, замените 'return false;' with: '} else {return false; } ' – ArtBIT

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