我有以下 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>
</ol>
</li>
</ol>
我希望以[popup]
钩子为目标,并给出它<li>
的弹出类,pop/n。然后我希望给它的父母(Foo)<li>
不同类别的箭头,arr/n。
这是代码:
var num = 0;
//Find [popup] instances, increment the number
$("li:contains('[popup]') li:last-child").each(function() {
var nextnumber = num++;
//add a general and a unique class to the list item containing the hook
$(this).addClass('popup' + ' ' + 'pop' + nextnumber);
//Get the parent list item, and give it general and unique classes also.
$thisArrow = $(this).parent().parent();
$thisArrow.addClass('arrow' + ' ' + 'arr' + nextnumber);
});
这对于嵌套一层深的目标没有问题,但不止于此。当出现目标嵌套两层深的列表时,会发生以下情况:
<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>
您可以看到,一旦到达最后一个(总是列表中的最后一次出现) :last-child 元素,不知何故,它的父级的父级被赋予了目标和父级的类,然后这些类被添加到它本身。
如果有人能指出我的错误,我将不胜感激。
(我尝试过.parents().eq(1);
而不是.parent().parent()
相同的结果。)