<div rownumber="0" messageid="112" class="post" style="position: relative; top: 0px;">
<div class="post_body">hey hey hey</div>
<div class="post_info" style="top: 0px;">
<ul>
<li class="vote"><a href="#">vote up</a></li>
<li class="flag"><a href="#">flag</a></li>
</ul>
</div>
</div>
当我点击“投票支持”或“举报”href
链接时,我希望能够从包含messageId
元素的主广告中获取div
。我该怎么做?
答案 0 :(得分:4)
$( 'li.vote a, li.flag a' ).click( function( e )
{
var msgId = $( this ).closest( 'div.post' ).attr( 'messageid' );
e.preventDefault();
} );
演示:http://jsfiddle.net/JAAulde/jQuGP/4/
使用data-
属性和jQuery .data()
方法最好,因为它会更符合HTML标准:http://jsfiddle.net/JAAulde/jQuGP/5/
答案 1 :(得分:3)
使用closest
$('.post a').click( function() {
var msgId = $(this).closest('.post').attr('messageid');
});
此外,您应该在自定义属性上使用data-
前缀,以确保符合Web标准。
答案 2 :(得分:3)
您可以使用.closest()
在树中,直到找到匹配项。它比.parents()
更适合过滤链接的所有父项(可以是更大标记中的许多元素),而.closest()
在找到匹配时停止。
$('li.vote a, li.flag a').click(function () {
var id=$(this).closest('div.post').attr('messageid');
});
另一件重要的事情:
要在HTML元素上存储任意数据,您应该使用 data-
属性(HTML5标准中引入)。
因此,在您的示例中,HTML将是:
<div data-rownumber="0" data-messageid="112" class="post"...
除了有效的HTML文档之外,另一个优点是您可以使用 jQuery .data()
函数来获取这些数据:
var id=$(this).closest('div.post').data('messageid');
答案 3 :(得分:1)
这是未经测试的,但这样的事情可能有效:
$(".vote a").click(function() {
var value = $(this).parents(".post").attr("messageid");
alert(value);
});
答案 4 :(得分:0)
您是否可以通过在包含消息ID的<a>
元素上动态输出id来解决问题?
类似
<a href="#" id="message-123">
答案 5 :(得分:0)
$( 'li.vote, li.flag' ).click(function() {
var msgId = $(this).closest('[messageId]').attr('messageId');
)}