4
<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元素中获取。我该怎么做?

4

6 回答 6

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/

于 2011-06-15T16:53:17.323 回答
3

采用closest

$('.post a').click( function() {
    var msgId = $(this).closest('.post').attr('messageid');
});

此外,您应该data-在自定义属性上使用前缀以确保符合 Web 标准。

于 2011-06-15T16:56:59.190 回答
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');

data-带有属性的 jsFiddle Demo

于 2011-06-15T16:57:24.510 回答
1

这是未经测试的,但这样的事情可能会起作用:

$(".vote a").click(function() {
    var value = $(this).parents(".post").attr("messageid");

    alert(value);
});
于 2011-06-15T16:55:17.573 回答
0

您可以通过在<a>包含消息 id 的元素上动态输出一个 id 来解决这个问题吗?

就像是

<a href="#" id="message-123">

于 2011-06-15T16:54:55.263 回答
0
$( 'li.vote, li.flag' ).click(function() {
    var msgId = $(this).closest('[messageId]').attr('messageId');
)}
于 2011-06-15T17:00:09.023 回答