javascript - 确定嵌套 HTML 列表内相邻的 <li>

标签 javascript jquery

我有一个嵌套列表。该列表中的一个元素包含一个名为“special”的类。该特定节点可以出现在嵌套列表中的任何位置。例如,

<ul id="mylist">
 <li>1</li>
 <li>2</li>
 <li>
    <ul>
        <li>3</li>
        <li class="special">4</li>
        <li>
           <ul>
              <li>5</li>
           </ul>
        </li>
    </ul>
 </li>
 <li>6</li>
</ul>

当我单击按钮时,我需要对特殊节点上方和下方的节点应用两个类,即“向上”和“向下”。因此,在上面的示例中,结果列表应如下所示:

<ul id="mylist">
 <li>1</li>
 <li>2</li>
 <li>
    <ul>
        <li class="up">3</li>
        <li class="special">4</li>
        <li>
           <ul>
              <li class="down">5</li>
           </ul>
        </li>
    </ul>
 </li>
 <li>6</li>
</ul>

正如你所看到的,因为我的列表是一个嵌套列表,并且特殊的 <li>节点可以出现在任何位置,因此有“上”和“下”<li>可能需要放置在其他一些<ul>内也是如此。

我的想法

  1. 我最初的想法是进行 DOM 遍历,但很快就变得非常复杂。

  2. 接下来我想我将创建一个包含所有 <li> 的数组在我的列表( $("#mylist").find ("li") )中,然后找出其中的哪些 <li>有“特殊”类( hasClass("special") ),一旦我知道出现“特殊”的数组索引,我将执行 +1, -1 来获取下部和上部节点。但我不知道该怎么做..

最佳答案

您可以使用.index()找出哪个 li 具有 .special。从那里,您可以使用您的想法#2:

var lis = $("#mylist").find ("li");
lis.eq(lis.index('.special')-1).addClass('up');
lis.eq(lis.index('.special')+1).addClass('down');

关于javascript - 确定嵌套 HTML 列表内相邻的 <li>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091390/

相关文章:

javascript - 以不可变的方式更新子组件中父组件的状态

javascript - 如何在 d3.js 中重置 Zoom?

javascript - d3 selectAll 困惑

javascript - 是否可以在页面发送到打印机之前修改 DOM?

javascript - 选择包含数字的第一个元素 - 2014

javascript - 如何在 Bootstrap 3 中制作 3 行导航栏

javascript - Chart.js - 条形图上的水平线干扰工具提示

javascript - 为什么 React 的 onClick 函数需要独特的语法?与其他事件触发器相比?

javascript - 无法获取 replaceWith 的字符串结果

javascript - 创建后动态检查单选按钮