我怎样才能找到给定片段标识符所定位的元素?

How can I find the element that would have been targeted by a given fragment identifier?

当浏览器导航到 URL(如 http://example.com/#foo)时,它会滚动到由 #foo 标识的元素; URI 的这个元素称为片段标识符。假设我在当前页面上有一个元素的片段标识符,我 not 尚未导航到该页面。我如何找出哪个 DOM 节点会成为它的目标?

有没有一种可靠的方法可以找到哪个 DOM 节点会被捕获所有情况的片段标识符作为目标?如果该解决方案使用 querySelector,我当然希望它能够抵抗标识符中发现的异常字符,但它们可能已被弃用。

选择器是表达“具有 ID 的元素或具有名称的 a 元素”的最简单方式。

CSS.escape 将为您处理特殊字符。

const fragment_id = `fdfd""fewf"`; // The test string I used for this
const escaped_fragment_id = CSS.escape(fragment_id);
const element = document.querySelector(`#${escaped_fragment_id}, a[name="${escaped_fragment_id}"`)

请注意,如果 fragment_id 的来源已被转义,您可能还需要使用 decodeURIComponent