2012-12-15 100 views
1

我想錶行添加到我的表身,我可以用這個代碼實現:定位表中添加的TR

var tr = $('<tr/>'); 
$('#myTable > tbody:last').append(tr); 

然而一些頁面可以有太多的行,所以我創建動態最後一行中的分頁符。

在這些情況下,如果我使用上面的代碼,新的tr將附加在paginator下面,這是不好的。

我的分頁程序tr的ID爲<tr id="paginator_tr">我不知道如果我可以改變這個代碼

$('#myTable > tbody:last').append(tr); 

符合條件檢查,如果最後TR有id = "paginator_tr"如果是這樣,那麼該分頁程序行之前添加新行。否則,只需將新行添加爲最後一行。

像這樣的條件可能在jQuery中?

+1

下一次小提琴將不勝感激,你有沒有考慮過使用css:not()pseudoselector? –

+0

我想知道你是否更容易在你的分頁器中添加新的tr。您可以在此之前檢查分頁符是否存在。 Jquery prepend:http://api.jquery.com/prepend/ –

回答

1
var $tbody = $('#myTable > tbody').last(), 
    $paginator_tr = $tbody.find('#paginator_tr'); 

if ($paginator_tr.length) { 
    $paginator_tr.before(tr) 
} else { 
    $tbody.append(tr) 
} 

如果分頁程序元素存在,否則,你可以追加tr元素可以使用before方法。

+0

多數民衆贊成在完美。 +1 – Houman

0

使用insertBefore()假設你的分頁行始終存在

tr.insertBefore('#paginator_tr') 

API參考:(!雖然它的工作原理)http://api.jquery.com/insertBefore/

+0

@DavidThomas正如我所說'如果行總是存在' – charlietfl

+0

在我離開您沒有的評論之前,它已被編輯。 –

0

這裏的另一種方法,這可能是唯一稍微瘋狂:

var table = $(this), 
    tr = $('<tr />'), 
    td = $('<td />', {'text' : 'Newly-added cell.'}).appendTo(tr), 
    method = table.find('#paginator_row').length ? ['insertBefore', '#paginator_row'] : ['appendTo', table.find('tbody').last()] 
    tr[method[0]](method[1]); 

JS Fiddle demo

實際上,method數組包含兩個參數,第一個參數是要使用的jQuery方法,第二個參數是該方法的選擇器,以確定添加tr元素的位置;它依賴於可以通過點符號(object.propertyName)和通過使用方括號(object[propertyName])訪問對象的屬性的事實。

參考文獻: