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')
$(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,因为他首先回答了问题,但您的答案同样好,非常感谢!