需要帮助jQuery条件,删除基于匹配文本的容器元素

时间:2011-06-10 14:08:19

标签: javascript jquery

这是我的标记:

  <div>
        <h3>Title</h3>
        <ul class="eventslist">
            <li>This event would be discarded</li>
                <ul>
                    <li>...</li>
                    <li>...</li>
                </ul>
            </li>
        </ul>
    </div>

    <div>
        <h3>Title</h3>
        <ul class="eventslist">
            <li>Earnings - This event would be included</li>
                <ul>
                    <li>...</li>
                    <li>...</li>
                </ul>
            </li>
        </ul>
    </div>

我需要帮助编写一个条件,该条件将遍历页面上的每个UL class =“eventslist”,并检查UL class =“eventslist”下的第一个LI是否包含单词“Earnings”(它可以位于文本和资本应该被忽略)。如果没有,则应将包裹在UL周围的整个DIV与其中的所有内容一起移除。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:1)

$('ul.eventslist').filter(function () {
    return !$(this).find('li:first').text().match(/earnings/i);
}).parent().remove();

jsFiddle Demo

说明:

  • .filter()列表中运行.eventslist,并仅保留第一个eanings中某处没有li的人。
  • 删除这些列表的父级(基本上是div)。如果标记可能更改,您也可以使用parent()而不是closest('div')。最无懈可击的是将课程提供给父div,然后使用closest('div.container')

答案 1 :(得分:1)

这个jQuery会做你想要的:

$(document).ready(function(){

    $(".eventslist").filter(function(){
        var text = $(this).children("li:first").text();
        return !/earnings/i.test( text );  
    }).closest("div").remove();
});

jsFiddle示例:http://jsfiddle.net/dGKMj/2/

答案 2 :(得分:1)

虽然上面的答案有效,但我更喜欢jQuery选择器的简单性。

$('ul.eventslist > li:first-child').not(":contains('Earnings'), :contains('earnings')").closest('div').remove();

我认为以后更容易阅读和更新。 &lt; - 这是我的意见

http://jsfiddle.net/natedavisolds/QFbD2/3/