1

我的html:

<div class="red-box">
<h2>
<a href="#">My Cars</a>
</h2>

<div class="block_left layout2">
    <div class="part1">
        <div class="gallery_block">
            <div class="block_topic">1</div>
            <div class="block_topic">2</div>
            <div class="block_topic">3</div>
        </div>
    </div>
</div>

<div class="red-box">
<h2>
<a href="#">My Bikes</a>
</h2>

<div class="block_left layout2">
    <div class="part1">
        <div class="gallery_block">
            <div class="block_topic">1</div>
            <div class="block_topic">2</div>
            <div class="block_topic">3</div>
        </div>
    </div>
</div>

</div>....

<h2><a href="">TITLE</a></h2>在上面的示例中,有很多具有不同标题的“红框”div 。我只需要选择和更改一个 - “red-box” -> “block_left” -> “part1” -> “gallery_block” -> “block_topic” 其中包含“3”,并且只在单个“red-box”中执行“得到<h2><a href="">My Cars</a></h2>

所以,我正在做以下事情:

    if ($(".red-box").children("h2").children("a").children("span:contains('My Cars')").length > 0) 
    {
// it finds the "red-box" which i need but how to select
// <div class="block_topic">3</div> in the "red-box" whose href has "My Cars"?
}

谢谢

4

3 回答 3

1
$('.red-box').has('h2:contains(My Cars)').find('div.block_topic').eq(2);

http://jsfiddle.net/L5YBf/1/

于 2013-04-29T11:03:51.890 回答
0

使用.has(), :contains..

尝试这个

$('.red-box').has('h2:contains("My Cars")').find('div.block_topic:contains("3")');

$('.red-box').has('h2:contains("My Cars")')=> 获取包含“我的汽车”的 .red-box。

.find('div.block_topic:contains("3")')=> 发现 div.block_topic 包含 3

于 2013-04-29T11:06:44.890 回答
0

如果我理解正确,您不需要if()表达式,只需要一个适当措辞的 jQuery 选择表达式。

此外,特别是如果要泛化表达式,则应避免:contains不加选择的 ,因为它会找到具有与感兴趣的字符串匹配的嵌入子字符串的元素。

要选择文本完全匹配的元素,可以使用.filter(),如下所示:

$(".red-box h2 a").filter(function() {
    return $(this).text() === 'My Cars';
}).closest(".red-box").find(".block_topic").filter(function() {
    return $(this).text() === '3';
});

或者,如果您想要一个.block_topic已知索引:

$(".red-box h2 a").filter(function() {
    return $(this).text() === 'My Cars';
}).closest(".red-box").find(".block_topic").eq(2);
于 2013-04-29T11:40:22.897 回答