在下面的代码示例中,有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>
答案 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或名称。