我是学习jQuery的初学者,问题是:
使用“not”内置函数,将所有不包含 UL 元素的 LI 元素的“text-decoration”CSS 属性设置为“underline”。
我尝试了一些不同的选择器,包括:
$(li:not(li > ul)).css('text-decoration','underline');
$(li:not(li ul)).css('text-decoration','underline');
谁能帮我吗?谢谢。
我是学习jQuery的初学者,问题是:
使用“not”内置函数,将所有不包含 UL 元素的 LI 元素的“text-decoration”CSS 属性设置为“underline”。
我尝试了一些不同的选择器,包括:
$(li:not(li > ul)).css('text-decoration','underline');
$(li:not(li ul)).css('text-decoration','underline');
谁能帮我吗?谢谢。
尝试使用以下not()
功能:
$('#myDemo > li').not(':has(ul)').css('text-decoration','underline');
最上面#myDemo
的ID在哪里ul
哪里。
上面给出的答案永远不会奏效。看看小提琴就知道为什么,也有你的答案
解释
这是一个棘手的事情。解决方案可能看起来很简单,但可能行不通。任何通过检查是否没有 a
来返回的尝试都是徒劳的。 <li>
<ul>
这是因为那些<li>
拥有 a 的人<ul>
将(可能)<li>
在 that 内拥有 s <ul>
。所以即使你没有匹配那些<li>
s,你也成功匹配了他们的孙子——最里面<li>
的s。
因此,最后,您已经匹配<li>
了 DOM 中的 所有内容
为了更好地理解它,请查看以下JS Fiddle,包括答案
答案- 从小提琴
我觉得您将不得不使用额外的过滤器(欢迎提出建议)。IMO 这只能通过类或 id 对 parent-most 的引用来完成<ul>
,然后过滤结果:
$('li').not(':has(ul)').css('text-decoration','underline');
// Matches all the LIs, and therefore not useful
$('li').filter(function() {
return $('ul', this).length == 0;
}).css('color', 'blue');
// Nice try, but still Matches all the LIs
// This works, but need a reference to main parent, using a class, id etc.
$('li').not(':has(ul)').filter(function() {
return $(this).parent().hasClass('the-parent');
}).css('color', 'red');
我不确定您是否可以仅使用选择器来执行此操作。
这应该有效:
$('li').each(function() {
if($(this).children('ul').length == 0) {
$(this).css('text-decoration','underline');
}
});