选择最近的隐藏输入

时间:2011-04-16 17:38:57

标签: jquery

我有以下div:

     <div class="vote">
     <input type="hidden" name="reply-id" value="83743">
     <a class="vote-up-0" title="Vote Up This Comment">up</a>
     <a class="vote-down-0" title="Vote Down This Comment">down</a>
     </div>


     <div class="vote">
     <input type="hidden" name="reply-id" class="reply-id" value="83745">
     <a class="vote-up-0" title="Vote Up This Comment">up</a>
     <a class="vote-down-0" title="Vote Down This Comment">down</a>
     </div>

(是的,它是SO代码的blatent(ish)副本,我试图看看他们是如何做到的)。 因此,当用户点击投票或投票时,它应该找到隐藏的ID。

这似乎不起作用:

       $('a.vote-up-0').click(function() {

           var id = $(this).closest('.reply-id').val();

5 个答案:

答案 0 :(得分:12)

closest通过上移DOM树来查找与选择器匹配的第一个元素。 匹配祖先元素。在任何时候都不会看到兄弟元素。

您想使用siblings

$(this).siblings('.reply-id').val();

答案 1 :(得分:5)

如果您想稍微概括一下,使用任何input - 元素名称,而不必知道父元素的名称,您可以使用:

var idOfHiddenInput = $(this).parent().find('input:hidden:first').attr('id');

参考文献:

答案 2 :(得分:2)

试试此代码

$(document).ready(function () {
    $('a.vote-up-0').click(function () {
        var id = $(this).parent().find('.reply-id').val();
    });
});

答案 3 :(得分:2)

为什么不将ID作为自定义属性附加到可点击对象本身。然后,您只需使用.attr即可访问它。例如,你可以像这样放一个val标签:

<a class="vote-up-0" title="Vote Up This Comment" val="2345">up</a>

然后使用

访问它
$(this).attr("val")

这可能会消除对隐藏字段的需求

答案 4 :(得分:0)

由于将隐藏元素包装在div中,因此也可以使用以下方法。

$(this).closest('div').find('input[name="reply-id"]').val() 

这将继续到最接近的DOM元素,并找到名称为“ reply-id”的隐藏输入元素。