为什么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



目录
相关文章
|
2月前
|
JavaScript 前端开发 容器
用HTML DOM实现有条件地渲染网页元素(上)
用HTML DOM实现有条件地渲染网页元素(上)
|
2月前
|
存储 JavaScript 前端开发
用HTML DOM实现有条件地渲染网页元素(下)
用HTML DOM实现有条件地渲染网页元素(下)
|
13天前
|
JavaScript 前端开发 开发者
.js的dom元素操作
【10月更文挑战第29天】通过灵活运用这些 DOM 元素操作方法,JavaScript 可以实现丰富的网页交互效果,如动态更新页面内容、响应用户操作、创建和删除页面元素等。在实际开发中,开发者可以根据具体的需求和场景,选择合适的 DOM 元素操作方法来实现所需的功能,为用户提供更加流畅和动态的网页体验。
|
13天前
|
JavaScript 前端开发
|
1月前
|
移动开发 JavaScript 前端开发
原生js如何获取dom元素的自定义属性
原生js如何获取dom元素的自定义属性
48 4
|
13天前
|
JavaScript 前端开发 API
|
1月前
|
JavaScript
在Vue中获取DOM元素的实际宽高
【10月更文挑战第2天】
222 1
|
2月前
|
JavaScript 前端开发
JavaScript HTML DOM 元素 (节点)
JavaScript HTML DOM 元素 (节点)
27 2
|
2月前
|
前端开发 JavaScript
前端基础(七)_DOM元素获取(getElementById、getElementsByTagName、getElementsByClassName、querySelector等)
本文介绍了如何在前端通过不同的方法获取DOM元素,包括getElementById、getElementsByTagName、getElementsByClassName、querySelector和querySelectorAll。
94 3
|
2月前
|
JavaScript
Vue3基础(十wu)___ref获取原生dom元素
本文介绍了Vue3中使用`ref`来获取和操作原生DOM元素的方法,通过示例展示了如何通过`.value`改变元素的样式。
47 0
Vue3基础(十wu)___ref获取原生dom元素