即使未指定id,JavaScript DOM元素是否还有唯一标识符?

时间:2017-01-05 00:44:51

标签: javascript html

在下面的代码示例中,有3个div元素,没有一个ID,但每个元素都可以通过返回到数组来唯一访问。我想知道JavaScript如何跟踪它们?浏览器是否为每个对象分配一个唯一的引用?这个唯一的引用是可发现的还是某个属性?或者是内部处理的所有内容?

<!DOCTYPE html>
<html>
<head>
  <style type="text/css">
    div {
      width: 150px;
      height: 150px;
      background-color: red;
      margin: 10px;
    }
  </style>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>

    <script type="text/javascript">
      var divArray = document.getElementsByTagName("div");
      for (var i=0; i<divArray.length; i++){
        divArray[i].onclick = function(){
          this.style.display = "none";
        }
      }
    </script>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

是的,JavaScript知道您点击了哪个元素:在此示例中,它指的是您点击的任何div,然后调用click()函数。 getElementsByTagName(div)正在传递div作为参数,因此作为div传递的对象在您的示例中变为this

与英语非常相似的

this可以根据上下文引用许多不同的内容。它甚至根据您使用的语言得到了不同的背景。为了更全面的定义,我强烈建议您查看 T.J. Crowder's explanation

当JavaScript引用DOM时,它不会向任何内容显式分配唯一ID,尽管它确实会创建内存分配。这可以通过内存分析和heap profiling看出。所有JavaScript代码都以两种方式创建内存;直接来自对象本身,也来自对这些对象的引用。

希望这有帮助!

答案 1 :(得分:1)

Thë“this”关键字与jQuery无关,它是当前上下文的JavaScript通用名称/ id,实际发生了某些事情。

当点击一个元素并且有一个click事件的监听器时 - this关键字将精确指向被点击的元素,并且可以用作感兴趣对象的通用句柄。

JavaScript中发生的一切都将发生在特定的上下文中或(当涉及到DOM时)某个对象/元素。

因此,当主题已经存在或者是该过程的主要参与者或对其采取的行动时,不需要ID或名称。