QuerySelector 无法识别带有空格的 #id

Har*_*ock 5 javascript reactjs

我正在使用querySelectorfetchdiv来滚动该位置。

const anchor = document.querySelector('#' + i) 
 if (anchor) {
      anchor.scrollIntoView(true);
      window.scrollBy(0, -190); 
    }
Run Code Online (Sandbox Code Playgroud)

问题是,在某些 div 中,我的 id 带有空格,例如 Vegan Pizza(变量 i),在这种情况下,变量anchornull并且滚动不起作用。

任何人都知道如何使 querySelector 与带有空格的 id 一起使用?

Cer*_*nce 11

空格是后代选择器。例如:

#container div
Run Code Online (Sandbox Code Playgroud)

将选择一个div其祖先的 id 为container某处的,例如下面的 div:

<section id="container">
  <div></div>
</section>
Run Code Online (Sandbox Code Playgroud)

改用[id="some id with spaces"]

const anchor = document.querySelector('[id="' + i + '"]') ;
Run Code Online (Sandbox Code Playgroud)

您还可以使用getElementById

#container div
Run Code Online (Sandbox Code Playgroud)
<section id="container">
  <div></div>
</section>
Run Code Online (Sandbox Code Playgroud)

但最好避免在 ID 中添加空格 - 即使浏览器可以识别它(使用此解决方法),它在技术上也是无效的。考虑删除 ID 中的所有空格,或者将值放入不同的属性(如数据集)中。

  • 引用规范:“*`id`属性指定其元素的唯一标识符(ID)。该值在元素的主子树中的所有 ID 中必须是唯一的,并且必须至少包含一个字符。该值不得包含任何空格字符。*” (2认同)
  • 除了之前的评论之外,我忘记引用我的参考文献:https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#the-id-attribute (2认同)