2009-09-21 158 views
0

我已經使用jQuery的clone()方法克隆了一些分頁。當我試圖顯示當前頁碼(addClass('active'))時,行爲只發生在元素的克隆版本上。任何人都可以幫忙嗎?代理克隆()jQuery元素

$(document).ready(function() { 
$('table.paginated').each(function() { 
    var currentPage = 0; 
    var numPerPage = 10; 
    var $table = $(this); 
    var repaginate = function() { 
     $table.find('tbody tr').hide() 
      .slice(currentPage * numPerPage, 
       (currentPage + 1) * numPerPage) 
      .show(); 
     }; 
    var numRows = $table.find('tbody tr').length; 
    var numPages = Math.ceil(numRows/numPerPage); 
    var $pager = $('<div class="pager"></div>'); 
    for(var page = 0; page < numPages; page++) { 
    $('<span class="page-number"></span>').text(page + 1) 
     .bind('click', {newPage: page}, function(event) { 
      currentPage = event.data['newPage']; 
      repaginate(); 
      $(this).addClass('active') 
       .siblings().removeClass('active'); 
     }).appendTo($pager).addClass('clickable'); 
    } 
    $pager.insertBefore($table).clone(true).insertAfter($table) 
     .find('span.page-number:first').addClass('active'); 
}); 
}); 

回答

0

克隆函數創建一個新的包裝集,其中包含新元素。 addClass函數在單個元素上運行,而不是原始項目和它的克隆。

另一種方法是在應用課程後調用end()。該功能將您的上下文設置回原始包裝集。

$pager 
    .insertBefore($table) 
    .clone(true) 
    .insertAfter($table) 
    .find('span.page-number:first') 
    .addClass('active') 
    .end() 
    .addClass('active'); 
0
'span.page-number:first' 

擴大選擇。現在它選擇所有span.page-number然後選擇第一個。如果你喜歡做點什麼

"div span.pagenumber:first" 

它只是可能的工作。

更新正如下面指出的那樣,克隆只是複製了它沒有的元素,從這一點開始追蹤所有的克隆等等,它只是做到了 - 克隆元素並忘掉它。

0

clone()選擇克隆的元素。在該指令:

$pager.insertBefore($table).clone(true).insertAfter($table) 
       .find('span.page-number:first').addClass('active'); 

很明顯,addClass僅適用於克隆,即克隆(真)後...,