【发布时间】:2017-09-15 15:52:18
【问题描述】:
我正在尝试构建一个标签系统。如果我有以下 HTML:
<div class="wizard-tabs">
<ul>
<li class="active"><a href="#" data-formstep="step1">Step 1</a></li>
<li><a href="#" data-formstep="step2">Step 2</a></li>
<li><a href="#" data-formstep="step3">Step 3</a></li>
</ul>
</div>
如何获取具有锚点且 data-formstep 属性等于某个值的列表项?我目前正在使用这个:
document.querySelector('.wizard-tabs > ul > li:has(a[data-formstep="'+newStep+'"])').classList.add("active")
但我收到一条错误消息:
Failed to execute 'querySelector' on 'Document': '.wizard-tabs > ul > li:has(a[data-formstep="step1"])' is not a valid selector.
我做错了什么?
【问题讨论】:
-
使选择器的目标是
a,然后你想要的li是父级-例如document.querySelector('.wizard-tabs > ul > li >a[data-formstep="'+newStep+'"]').parentElement -
这似乎是一个不必要的额外步骤。必须有一种方法可以根据锚点的属性而不是锚点来选择 LI。
-
但是
:has在任何浏览器中都不受支持,所以这实际上是一个必要的额外步骤——争论浏览器支持或不支持什么是没有意义的 -
哦,好的。我没有意识到这一点。我在 jquery(我正在尝试使用 vanilla)中看到 :has() 并认为它最初是一个 JS 选择器。
-
MDN documentation for :has - 我发现 MDN 文档非常好,因为即使 firefox 不支持该功能(但)MDN 也会记录它,因为它是一个新兴标准