从父母那里获取身份证

时间:2011-06-15 16:51:36

标签: jquery html dom-traversal

<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。我该怎么做?

6 个答案:

答案 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');

jsFiddle Demo with data- attributes

答案 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');
)}