2011-12-01 57 views
0

我有一個表格,其中每一行都包含一個表格。見下面

<table> 
<tr><th>Fee Type</th><th>Amount</th><th>% Discount</th><th>Discounted Amount</th><th>Payable to</th><th>Remove</th></tr>  
<tr> 
    <form> 
     <td></td> 
     <td class="cost"></td> 
     <td> <input /> </td> 
     <td class="discount"></td> 
     <td></td> 
    </form> 
<tr> 
</table> 

現在我的意圖是有一個全局的保存按鈕,將循環通過每個窗體並執行ajax帖子。見下文

function saveEditedFees(){ 
     $("#savefeechanges").click(function(){ 
      $("#feestable form").each(function(){ 
       alert($(this).attr('id')); 
      }); 
     }); 
    } 

我的問題是使用$(本)使用類「成本」「打折」的元素 我試圖

alert($(this).find("td").eq(2).html()); 
alert($(this).siblings('.cost').text()); 
alert($("td .cost" ,this).text()); 
訪問值,爲「TD」

基本上,我試圖測試<td class="cost">中包含的值是否等於<td class="discount">,這樣我將選擇性地做一個ajax後。

請幫忙。

+0

也許吧? $(this).find('。cost')。text() – Filip

+0

不,之前也曾嘗試過。沒有工作 – Binaryrespawn

回答

4

無效的標記。

你有一個<form>作爲<tr>的子女。

在Chrome中的HTML渲染爲:

<tr> 
    <form></form> 
     <td></td> 
     <td class="cost"></td> 
     <td> <input> </td> 
     <td class="discount"></td> 
     <td></td> 
</tr> 

正如你所看到的,<form>不再有任何的內容。

記住,.eq()需要一個從零開始的索引,所以它應該是:

$(this).find("td").eq(1) 

...得到.cost元素。

+0

我同意。 '

'不適合這種情況。在桌子周圍放置一個巨大的「」會更好,然後遍歷「」元素。 – fronzee

+0

它應該是父母嗎? – Binaryrespawn

+0

@Binaryrespawn:在每個表單中都有一個單獨的表格,或者有一個包含整個表格的單一表格。取決於你的需求。 – RightSaidFred

0

您的意思是在你行的空間,上面寫着:

alert($("td .cost" ,this).text()); 

應該

alert($("td.cost", this).text()); 

記住的this背景下將意味着this指表單元素,所以siblings()將無法​​正常工作。我認爲你在$("td.cost", this)使用.html().text()在正確的軌道上。

+0

另請參閱RightSaidFred關於無效標記的答案。 – fronzee

0
$(this).closest('form').find('.cost'); 

這與我回答的另一個問題類似,我解釋了traversal

但是,在繼續之前,您應該重構您的html,因爲TR元素應該只包含TD或TH。如果您覺得您需要在另一個表格中嵌入一張表格以進行佈局,那麼即可。在這種情況下,我會推薦div,但是打破桌子的慣例肯定會導致roa的流淚。