JQuery:封装嵌套元素父级的最后一个子级
我有以下HTML:JQuery:封装嵌套元素父级的最后一个子级,jquery,jquery-selectors,Jquery,Jquery Selectors,我有以下HTML: //'[popup]' hook nested at random depths, using <ul> or <ol>, no classes or id's <ol> <li>Blah</li> <li>Blah</li> <li>Foo <ol> <li>[popup]Bar</li
//'[popup]' hook nested at random depths, using <ul> or <ol>, no classes or id's
<ol>
<li>Blah</li>
<li>Blah</li>
<li>Foo
<ol>
<li>[popup]Bar</li>
</ol>
</li>
</ol>
这对于嵌套一层的目标来说是没有问题的,但不能超过那个层。当显示目标嵌套在两层深的列表时,会出现以下情况:
<ol>
<li>Blah</li>
<li class="popup pop1 arrow arr1">Blah
<ol>
<li class="arrow arr0">Foo
<ol>
<li class="popup pop0">[popup]Bar</li>
</ol>
</li>
<li class="arrow arr2">Foo
<ol>
<li class="popup pop2">[popup]Bar</li>
</ol>
</li>
</ol>
</li>
</ol>
废话
诸如此类
Foo
[popup]栏
Foo
[popup]栏
您可以看到,一旦到达最后一个(始终是列表中的最后一个):最后一个子元素,不知何故,它的父元素的父元素被赋予了目标和父元素的类,然后这些类被添加到它自己
如果有人能指出我的错误,我将不胜感激
(我尝试了
.parents().eq(1);
而不是.parent().parent()
,以获得相同的结果。)对箭头这件事不是100%确定,但我认为您的主要问题是嵌套的li内容也会成为:contains的目标
测试“以[popup]开头”的文本内容可能会有所帮助
var num = 0;
//Find [popup] instances, increment the number
$("li:contains('[popup]')").each(function() {
if($(this).text().indexOf("[popup]")==0){
var nextnumber = num++;
$(this).addClass('popup' + ' ' + 'pop' + nextnumber);
}
});
请看这里:
如果我不明白这个问题,请告诉我:-)你能试着发布你想要的结果吗,这样我们就可以将它与你得到的结果进行比较。我对你想要实现的目标有点困惑——用你的源代码@Marco-demoncles创建了一个JSFIDLE——这里是实际的用例。A部分是我想要的,D部分是当目标嵌套超过一个级别时发生的事情。这看起来很棒,+1以及我不知道的indexOf-解决了这个问题!
var num = 0;
//Find [popup] instances, increment the number
$("li:contains('[popup]')").each(function() {
if($(this).text().indexOf("[popup]")==0){
var nextnumber = num++;
$(this).addClass('popup' + ' ' + 'pop' + nextnumber);
}
});