2010-07-08 130 views
4

我试图使用最接近的表单元素值。这里有一些示例代码。jquery最接近元素值

<table> 
    <tr> 
    <td>Hour <input type="input" value="12" name="data[hour]" class="hour" /></td> 
    <td>Minute <input type="input" value="12" name="data[minute]" class="minute" /></td> 
    <td><a href="#" class="add-data">Add Row</a></td> 
    </tr> 
</table> 

见我不能序列化的形式,因为它是一个大表格的一部分,所以我需要抢最接近每个输入添加行链路的哟将能够添加多行。

我已经试过

var hour = $(this).closest('.hour').val();  
var hour = $(this).closest('input', '.hour').val(); 
var hour = $(this).closest('input[name="data[hour]]").val(); 

任何想法如何,我可以得到的表单值?

在此先感谢

回答

13

假设你有每个TR只是一个.hour元素,这将做到这一点:

var hour = $(this).closest('tr').find('.hour').val(); 

closest会:

把那 匹配的第一个祖先元素选择器,从 当前元素开始,并通过DOM树向上推进 。

所以,你需要去tr,并从那里找到.hour后代。

+0

那是一个完美的。谢谢 – Lee 2010-07-08 16:12:15

+0

精彩回答karim谢谢了:) – 2013-11-20 22:11:38

1

要扩大Karim79的回答是:

.closest(),直到它找到一个匹配向上移动DOM树。它不适用于同一级别的元素 - 比如你的情况(所有元素都有一个td作为父级)。

http://api.jquery.com/closest/

要使用最接近()在你的情况,你不得不使用(这是一个有点矫枉过正这里):

$(this).closest("tr").find(".hour").val();