2011-12-30 73 views
10

考虑下面的HTML ...jQuery的 - 内容等于而非内容包含:

<div id="group"> 
    <ul> 
     <li><div class="category">one</div></li> 
     <li><div class="category">one</div></li> 
     <li><div class="category">onetwo</div></li> 
     <li><div class="category">two</div></li> 
    </ul> 
</div> 

...我试图找出如何在jQuery的选择,将选择所有'#group ul li'元素有一个子节点'.category',innerHTML等于某个字符串(例如“one”)。例如,给定字符串“one”,这个选择器将返回前两个li。

这是我到目前为止有:

$('#group ul li')将选择所有李时珍的。然后我需要筛选:
$('#group ul li').filter(".category:contains('one')")将选择所有这些li,使它们具有包含字符串'one'的类别类别的子项。但是,有没有什么办法可以检查这是否是等于为1?

我想也许只是写我自己的功能,做平等检查,并通过它来过滤?

回答

20
$('#group ul li div.category').filter(function() {return $(this).text() == "one";}).parent() 

这可能是最具体的方式。请参阅example

+0

您的示例不会返回预期的结果吗? – 2011-12-30 07:41:20

+1

你想得到前两个“李”,它确实如此。那么你的预期结果是什么? – 2011-12-30 16:36:40

+0

可能在最后错过了.parent()...我的错误 – 2013-03-13 00:59:48

4

您可以使用具有功能性参数的过滤功能。喜欢的东西:

$('#group ul li').filter(function() { return $(this).html() == 'one'; }) 
+0

这是关闭的,但$(this)应该是检查类别子,而不是这个... – 2011-12-30 07:45:51

0

会if语句工作,或者你在寻找一个选择器?作为声明,这可能会...

if ($('#group ul li .category').html() == 'one') 
+0

我在寻找一个选择器,我想选择许多不同的

  • 's。 – 2011-12-30 07:45:07

    3

    以上答案都不正确。最后我用这个作为我的选择:

    $('#group ul li').filter(function() { 
        return $(this).children('.category').html() == 'one'; 
    }) 
    

    请让我知道,如果有更好的方法来做到这一点,我会愉快地接受你的答案。

    +0

    实际上....你的就像接受的答案,除了他过滤更具体的前面,你的过滤后更具体。我真的很喜欢其他的。 – Metropolis 2013-06-20 14:59:24

    +0

    查看对接受答案的评论。 – 2013-06-21 16:59:06