Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何最可靠/简单地访问<;html>;元素通过javascript?_Javascript_Html_Css_Dom - Fatal编程技术网

如何最可靠/简单地访问<;html>;元素通过javascript?

如何最可靠/简单地访问<;html>;元素通过javascript?,javascript,html,css,dom,Javascript,Html,Css,Dom,用例:我希望动态地将类添加到文档中的元素中,以便当前使用.class name&的一些SASS混合项可以在包含body类的选择器中应用,否则我将得到.class name.body类。选择器的其余部分除非类名的应用级别高于 以前我使用了document.body.classList.add,它看起来整洁、简单、健壮 在转换为向元素添加类时,我想知道等效代码是什么: document.html——不,似乎没有这样的事情 document.rootElement——我认为应该可以工作,但是当我测试

用例:我希望动态地将类添加到文档中的
元素中,以便当前使用
.class name&
的一些SASS混合项可以在包含body类的选择器中应用,否则我将得到
.class name.body类。选择器的其余部分除非
类名
的应用级别高于

以前我使用了
document.body.classList.add
,它看起来整洁、简单、健壮

在转换为向
元素添加类时,我想知道等效代码是什么:

  • document.html
    ——不,似乎没有这样的事情
  • document.rootElement
    ——我认为应该可以工作,但是当我测试时,
    null
    不是很健壮吗
  • document.getElementsByTagName('html')[0]
    ——相当笨重,但肯定有效/健壮
  • document.body.parentElement
    ——看起来更干净,应该可靠吗?这是直接的吗
  • document.querySelector('html')
    正如下面Louys所建议的那样——感觉我们不需要查询它了
  • 还有其他我没想到的选择吗

正如@thibsc和@louyspatricebesette上面所说,在
document.querySelector(“html”)
document.documentElement
中有两个很好的选项

文档.查询选择器(“html”)
除了
document.querySelectorAll()
之外,它通常是一个需要了解的重要函数。它返回文档顺序中的第一个匹配元素,对于`document.querySelectorAll(“html”)而言,该元素将是根html对象


document.documentElement
document
对象的
documentElement
属性总是指根元素,在HTML中通常是
标记

速度 在我的超级科学速度测试中,document.documentElement今天似乎更快了:

let date = Date.now();
for (var i=0; i<123456; i++) {
    a = document.querySelector("html");
    a.classList.toggle("hello");
    a = null;
}
console.log(Date.now() - date);
//result: 254

let a;
let date = Date.now();
for (var i=0; i<123456; i++) {
    a = document.documentElement;
    a.classList.toggle("hello");
    a = null;
}
console.log(Date.now() - date);
//result: 225

document.querySelector(“html”)
;)或者也可以
document.childNodes[1]
,因为它应该是doctype,并且html nodeThanks@LouySpatriceBesette已添加到questionQuerySelector中的列表中。它很简单,@DrMeers,我想你应该更喜欢下面这个答案:它直接给你html节点
文档。documentElement
就是我想要的——不需要查询,从列表中选择等等——简单而健壮。我真的很好奇你为什么要避免查询——这只是个人偏好吗?我查询了很多,所以这实际上是我的首选解决方案,但可能不应该是哦,您可能还想了解中的所有琐事-例如,您可以通过document.links属性访问所有链接!一个查询意味着一个DOM搜索,在这方面做得太过火了,而且不如一个规范的访问点那么健壮。不仅rootElement不受欢迎,它从一开始就没有应用到HTML DOM——它特定于SVG DOM。就我个人而言,我更喜欢documentElement而不是querySelector('html'),原因与我更喜欢document.body而不是document.querySelector('body')。
const $ = document.querySelector.bind(document);
$("html").classList.add("myClass");