如何最可靠/简单地访问<;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");