2011-12-01 140 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的流泪。