2017-01-03 92 views
-1

我有一個單元格中有按鈕的表格行。當我單擊該按鈕時,我想將同一行的每個其他單元格內的文本分配給一個變量。所以如果我有5個單元格,我會有4個變量(第5個是按鈕)。只執行DOM迭代一次

我現在要做的是:

$('.save').click(function(e){ 
    var id = $(this).closest('tr').find('.id').text(); 
    var x = $(this).closest('tr').find('.x').text() 
}); 

this指按鈕,所以我有多達瀏覽到包含tr,下至每一個細胞。有沒有辦法避免必須遍歷每個變量的dom?換句話說,要專注於該行而不重複每次$(this).closest('tr')? 注意:我並不是指只寫它,而是指後面的操作。所以像var row = $(this).closest('tr')這樣的東西不是一個解決方案,因爲無論如何,查找行的操作將會再次執行。

+1

是什麼讓你覺得「var row = $(this).closest('tr')不是一個解決方案,因爲無論如何,尋找行的動作將被再次執行。」 ?這不是jQuery選擇器在我有限的理解中工作的方式。 –

+0

嗯,你可以使用'$每個(函數(){VAR行= $(本).closest( 「TR 」)(「 拯救」); $(本)。點擊; ......',但它不「T很有意義這裏complexify你的代碼。去尋找父母的時間是無關緊要的。 –

+0

@DanFarrell如果我的代碼替換'$(本).closest我只是用(」 TR「)'和'row'我的代碼可讀性的佔位符,或者我失去了一些東西 –

回答

3

因此,像var row = $(this).closest('tr')這樣的東西不是一個解決方案,因爲無論如何,查找行的行爲將再次執行。

不,它不會。它將執行一次(發生點擊時)和結果(jQuery對象包裹在tr元素周圍)存儲在row變量中。所以你就是這麼做的。當點擊時要使用

$('.save').click(function(e){ 
    var row = $(this).closest('tr'); 
    var id = row.find('.id').text(); 
    var x = row.find('.x').text() 
}); 
+0

感謝。我想我只是使用「佔位符」的字符串。 –

-1

使用dataset屬性的按鈕標記與所需的數據擴展:

<button data-id="some-id" data-x="some-x" ...> 

所以,你可以生成這個按鈕與所需的屬性,並且不需要經常檢查DOM。

$('.save').click(function(e){ 
    var id = $(this).data('id'); 
    var x = $(this).data('x'); 
}); 
+0

謝謝,但這不是我所要求的。表格單元是contenteditable,所以我想抓住更新的值 –

0

我覺得你不必再去該行var tr = $(this).closest("tr")會做的伎倆。