0

我想我已经差不多了,但还没有完全...

仅当 DOM 中上一层和下两层的元素包含某个字符串时,我才想从此 HTML 中选择 a.rate 按钮。我知道这扩展了 jQuery 选择器的限制,但它只是为了好玩而不是生产。

HTML:

<div class="comment">

    <div class="submitted">
        <a href="#" title="View user profile.">Blow, Jo</a>  
    </div><!-- CLASS submitted -->

    <div class="content">
        <p>blah</p>
        <p>blah</p>
        <p>blah</p>
  </div><!-- CLASS content -->

      <ul class="links">
        <li class="comment_delete first"><a href="/comment/delete/1204">delete</a></li>
            <li class="comment_edit"><a href="/comment/edit/1204">edit</a></li>
            <li class="flag_content_add">hippo</li>
            <li class="rate_thumbup_comments last">
                <span>
                    <div class="rate-widget-1 rate-widget clear-block rate-average">
                        <a class="rate-button" rel="nofollow" href="#">up</a>
                        <div class="rate-info">1 person likes this.</div>
                    </div>
                </span>
            </li>
        </ul>

</div>

到目前为止,我得到的 jQuery 选择器:

$('.submitted a:contains("Blow")').parent().parent().next('.links .rate_thumbup_comments .rate-widget').find('a').css('display', 'none');

所以,重申一下:我想选择 div.rate-widget 内的标签,它位于 li.rate_thumbup_comments 内,只有当容器 div.submitted 有一个带有“Blow”的字符串时。所有这些都在容器 div.comment 中

4

2 回答 2

1

因此,例如,您想要隐藏特定用户评论的所有评级小部件。如我错了请纠正我。

$('.submitted a:contains("Blow")').closest(".comment").find('.rate-widget a').hide();

这就是你本质上想要做的吗?

.next()仅选择下一个元素,并且仅当它与选择器匹配时才传入。如果您需要选择一个不立即下一个的元素,请使用.nextUntil(targetselector).next(),或者在您的情况下,.nextUntil(".links").next()

于 2012-06-13T19:28:58.433 回答
1

这似乎适用于您提供的 html:

$('.submitted a:contains("Blow")').parent().parent().children('.links').find('.rate-button').css('display', 'none');
于 2012-06-13T19:32:55.413 回答