我有以下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();
答案 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”的隐藏输入元素。