当浏览器导航到像
http://example.com/#foo
这样的 URL 时,它会滚动到由 #foo
标识的元素; URI 的这个元素称为片段标识符。 假设我有当前页面上某个元素的片段标识符,但我还没有导航到该元素。 我如何找出它的目标是哪个 DOM 节点?
仅使用 document.getElementById
#foo
还可以定位旧式锚点 <a name="foo">
,而此方法错过了。使用document.getElementsByName
<input>
或<textarea>
节点这样的非锚点,和会丢失由
id=
属性标识的元素。由于我还没有导航到该片段,所以我也无法使用 document.querySelector(':target')
querySelector
,我当然希望它能够对标识符中发现的异常字符具有鲁棒性,无论它们如何被弃用。
a
元素”的最简单方式。
将为您处理特殊字符。
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}"`)
请注意,如果
decodeURIComponent
fragment_id
。