为什么dom元素可以直接使用id名称来获取元素?

简介: 为什么dom元素可以直接使用id名称来获取元素?

例子

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="testId" class="testClass">凯小默测试页面</div>
  <script>
    console.log('1111', testId);
    console.log('2222', testClass);
  </script>
</body>
</html>


结果

id能直接打印出来dom,class的不行(谷歌浏览器打开)

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9mOWQ2MDVjZDJhNjg3Njg2OTc3Y2ZhNzgzNWI3Y2FhNS9DRjk1RTE5RDQxM0U0MTE1OTlBQzIxQUM4NDkxRjY1MQ.png


谷歌

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9mOWQ2MDVjZDJhNjg3Njg2OTc3Y2ZhNzgzNWI3Y2FhNS9CNTdEMjNDQUI4ODE0NEQ2OTZDRjcyMzAxQjI0MkREMw.png

firefox

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9mOWQ2MDVjZDJhNjg3Njg2OTc3Y2ZhNzgzNWI3Y2FhNS85Nzg2MEI3MUVDQjg0NTE3QTM2OTk3NUMwNzk1OTk0OQ.png


ie7-ie8

aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9mOWQ2MDVjZDJhNjg3Njg2OTc3Y2ZhNzgzNWI3Y2FhNS8xQjdDQkYxREVENjg0ODcwQUMxMzdEMDJGMjdGODcwNw.png

ie9-ie11


aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9mOWQ2MDVjZDJhNjg3Njg2OTc3Y2ZhNzgzNWI3Y2FhNS9CRUFGNzUwRkNCMUE0ODgwQkI0NEM2NjE2ODUwNjEzOQ.png




原因


如果dom元素的id名称不和js内置对象属性或全局变量重名的话,该名称能从window原型链上进行查找的属性,Firefox、Chrome、IE 9-11都支持,没有形成标准,而且容易污染全局,造成各种冲突和错误,不推荐使用。


我们看一个有趣的东西


https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor

Object.getOwnPropertyDescriptor()


   方法返回指定对象上一个自有属性对应的属性描述符。(自有属性指的是直接赋予该对象的属性,不需要从原型链上进行查找的属性)



1、testId显然不是window自有属性对应

Object.getOwnPropertyDescriptor(window, 'testId')  // --->  undefined



2、在原型链上,window.__proto__.__proto__上面找到了testId

Object.getOwnPropertyDescriptor(window.__proto__.__proto__, 'testId')


aHR0cHM6Ly9ub3RlLnlvdWRhby5jb20veXdzL3B1YmxpYy9yZXNvdXJjZS9mOWQ2MDVjZDJhNjg3Njg2OTc3Y2ZhNzgzNWI3Y2FhNS81NjAyMjk4NjY5MzY0QzQxOUM4NUI2QUE5NjE4OTY1QQ.png



目录
相关文章
|
1月前
|
JavaScript 前端开发
使用jQuery操作DOM元素
使用jQuery操作DOM元素
21 1
|
1月前
|
JavaScript 前端开发
JavaScript操作DOM元素
JavaScript操作DOM元素
17 1
|
1月前
|
JavaScript
怎么判断两个文档节点、网页元素(element)是否相同?判断两个DOM节点是否相等、相同的4种方法
怎么判断两个文档节点、网页元素(element)是否相同?判断两个DOM节点是否相等、相同的4种方法
|
1月前
|
JavaScript
vue监听dom元素的宽高变化和自定义指令监听dom元素的宽高变化
vue监听dom元素的宽高变化和自定义指令监听dom元素的宽高变化
101 0
|
6天前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
11 0
|
1月前
|
前端开发 JavaScript
HTML DOM如何通过JavaScript动态改变元素的CSS样式?
【5月更文挑战第23天】HTML DOM如何通过JavaScript动态改变元素的CSS样式?
32 1
|
1月前
|
移动开发 JavaScript 前端开发
jQuery 根据 DOM 元素 attribute 进行过滤的语法
jQuery 根据 DOM 元素 attribute 进行过滤的语法
|
1月前
|
存储 移动开发 JavaScript
jQuery 根据 css 类筛选 DOM 元素的代码
jQuery 根据 css 类筛选 DOM 元素的代码
|
1月前
|
JavaScript 前端开发 UED
【Web 前端】如何将一个 HTML 元素添加到 DOM 树中的?
【5月更文挑战第2天】【Web 前端】如何将一个 HTML 元素添加到 DOM 树中的?
|
1月前
|
JavaScript 前端开发 架构师
Web Components:自定义元素与Shadow DOM的实践
Web Components是用于创建可重用自定义HTML元素的技术集合,包括Custom Elements、Shadow DOM、HTML Templates和Slots。通过Custom Elements定义新元素,利用Shadow DOM封装私有样式,&lt;slot&gt;元素允许插入内容。自定义元素支持事件处理和属性观察,可复用且样式隔离。它们遵循Web标准,兼容各前端框架,注重性能优化,如懒加载和Shadow DOM优化。
26 0