javascript - 选择两个 id 之间的每个元素

标签 javascript html css dom css-selectors

[更新:由于问题似乎无法仅使用 CSS 解决JavaScript 函数使用两个标记的元素作为输入就足够了]

我有一个递归列表,其中包含两个用 ID 标记的元素(T1T2)。 这两个元素不一定是彼此的 sibling 。

我的问题是关于一个 CSS 选择器 来选择 这两个 ID 之间的每个 li 列表项:

  • 包括:
    • 本身带有 ID 的元素
    • 在这两者之间(递归)的所有 li 子节点或父节点,而不仅仅是兄弟节点
  • (不包括
    • 第一个id之前或第二个id之后的所有元素
    • 所有非li元素)

ids T1T2 也可以有不同的顺序,T2 在前,T1 在某处稍后在树中。


下面的示例显示了两个 ID 元素以及应选择的元素:

#T1 { color: red;}
#T2 { color: blue;}
<ul>
  <li>not selected</li>
  <li>not selected</li>
  <ul>
    <li>not selected</li>
    <li id="T1">selected (specific id)</li>
    <li>selected</li>
    <ul>
      <li>selected</li>
    </ul>
  </ul>
  <ul>
    <li>selected</li>
    <li>selected</li>
    <ul>
      <li>selected</li>
      <li>selected</li>
      <li id="T2">selected (specific id)</li>
    </ul>
    <li>not selected</li>
  </ul>
  <li>not selected</li>
  <li>not selected</li>
  <ul>
    <li>not selected</li>
  </ul>
  <li>not selected</li>
</ul>

最佳答案

这是一个函数,它接受一个元素数组,遍历它们,并将特定类应用于两个 id 之间的所有元素(并且还包括具有 id 的元素)。

var liElements = document.querySelectorAll("li");

var selectElementsBetweenIds = function (elements, id1, id2) {

  var firstIdFound = false;
  var applySelector = false;


  for (var i = 0; i < elements.length; i++) {
    var elementId = elements[i].getAttribute("id");

    if (elementId === id1 || elementId === id2) {
      applySelector = firstIdFound ? false : true;
      firstIdFound = applySelector ? true: false;
      elements[i].classList.add("selected");
      continue;
    }
    if (applySelector) {
      console.log("getting here");
      elements[i].classList.add("selected");
    }
  }
}

selectElementsBetweenIds(liElements, "T2", "T1");

JSFiddle Example

关于javascript - 选择两个 id 之间的每个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47398032/

相关文章:

javascript - 如何获取已注册的自定义元素列表

jquery - 如果没有空间可填充,如何使 <div> 扩展以填充空间而不拉伸(stretch)父级?

html - 如何为 weebly 创建新的顶部标题

javascript - 在 HTML 文档中全局禁用拼写检查和自动完成功能?

javascript - 开头字符与正则表达式不匹配

html - IE 7 ul li 嵌套和定位 - 顶端不匹配

CSS3 过渡持续时间/延迟不适用于颜色属性,所有其他工作

javascript - 如何在动态元素上添加向上滑动动画?

javascript - 映射对象数组但仅显示唯一值

html - Bootstrap 3 中列内容的垂直对齐