需要一种更优雅的方法,使用jQuery在dom树中查找元素

时间:2013-06-25 20:20:32

标签: javascript jquery

我有一些元素在窗口完成加载时需要更改的元素中飞来飞去($(window).load...

当脚本加载时,我一直在努力寻找一种更优雅的方法来寻找字符串。

下面,您还可以看到parentnext运营商的重复使用......

我已经尝试了closest但是它只上了dom树一次(根据我的理解)而且parents从来没有真正为我工作,但我可能错了。

实施例

$(window).load( function(){
    if($(".postmetadata:contains('Vancity Buzz')").length){
        $(this).parent().parent().next().next().next().next('.articleImageThumb img').hide();
    }
});

HTML输出贯穿以下内容:

<div class="boxy">
    <div class="read">  
        <div class="postmetadata">Vancity Buzz</div>
        <div class="articleTitle"></div>
    </div>
    <div class="rightCtrls"></div>
    <div class="initialPostLoad"></div>
    <div class="ajaxBoxLoadSource"></div>
    <div class="articleImageThumb">
        <a href="#">
            <img src="image.png" class="attachment-large wp-post-image" alt=""/>
        </a>
    </div>
</div>

3 个答案:

答案 0 :(得分:6)

我想你想这样做:

$(".postmetadata:contains('Vancity Buzz')")
     .closest('.read') //Closest will get you to the parent with class .read
     .siblings('.articleImageThumb').hide(); //this will get you all the siblings with class articleImageThumb

this指的是那里没有你在if条件中检查的元素的窗口。

<强> Fiddle

我不知道你的意图是仅通过隐藏图像来获得空锚标签。如果是这样,只需添加一个查找。

答案 1 :(得分:4)

你可以这样做

$('.articleImageThumb img').toggle($(".postmetadata:contains('Vancity Buzz')").length)

如果有多个div并且你需要遍历那么有多种方式

$(".boxy:has(.postmetadata:contains('Vancity Buzz'))").find('.articleImageThumb img').hide()

$('.postmetadata:contains("Vancity Buzz")').closest('.boxy').find('.articleImageThumb img').hide()

$(".boxy:has(.postmetadata:contains('Vancity Buzz')) .articleImageThumb img").hide()

答案 2 :(得分:1)

您是否考虑过父母http://api.jquery.com/parents/,您可以通过这样的选择器:

 $(this).parents('.boxy').find(".articleImageThumb")

小心但是,如果有一个父级的四​​四方方,那么parent()会返回它,因此你会发现多个.articleImageThumb。