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

Javascript 需要关于jQuery条件的帮助,该条件基于匹配的文本删除容器元素,javascript,jquery,Javascript,Jquery,这是我的标记: <div> <h3>Title</h3> <ul class="eventslist"> <li>This event would be discarded</li> <ul> <li>...</li>

这是我的标记:

  <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是否包含“收益”一词(它可以在文本中的任何位置,并且应忽略大写)。如果没有,整个包裹在UL上的DIV应该连同里面的所有东西一起移除

非常感谢您的帮助

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

说明:

  • .eventslist
    列表上运行
    .filter()
    ,并仅将那些没有
    含义的
    保留在第一个
    li
    中的某个位置
  • 删除这些列表的父项(基本上是
    div
    )。如果标记可能更改,也可以使用
    最近('div')
    ,而不是
    parent()
    。最可靠的方法是给父类
    div
    ,然后使用
    最近的('div.container')

此jQuery将执行您想要的操作:

$(document).ready(function(){

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

jsidle示例:

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

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

我认为这是更容易阅读和更新后。有可能给那些有收入的人一个特定的身份证吗?这将使这更容易。。。当您使用服务器端脚本生成此标记时,请让服务器代码查看它是否为.startsWith(“Earning”),然后向li标记号添加一个ID,不幸的是,我无法控制标记-我应该指定该.yes。当你发布你的代码时,我还在写代码。很高兴我走上了正确的道路。必须指定两个版本的
收益
并不意味着我会说:“嗯,以后更新它是多么容易啊!”我不确定这两个版本是否有效。这一版本的问题是
.eventslist
列表将包含多个列表项,代码停止工作:.@bazmegakapa-我希望它不区分大小写,或者我也可以使用一些正则表达式。但我不认为这是一个大倒退。很明显选择器在做什么,这是一个加号。此外,两个版本的“收益”正是他所指定的。@natedavisolds如果您添加另一个
li
(我在第二个
ul
中添加了一个),它将删除
div
,即使它不应该删除。关于选择器:它们工作得很好,只是不要说它们更易于维护。例如,对我来说,
filter
的语法非常直观。@bazmegakapa-啊,是的。我将选择器更新为只检查第一个孩子。非常感谢bazmegakapa-我将支票交给Tomgrohl,因为他首先回答了问题,但您的答案同样好,非常感谢!