对javascript隐藏的文档元素

对javascript隐藏的文档元素,javascript,html,html5-canvas,Javascript,Html,Html5 Canvas,在我目前正在开发的一个web应用程序中,我遇到了一些处理javascript文档可见性的奇怪问题。在这个应用程序中,我有一个div,它包含一个InfoVis图,表示节点和边的网络,我为它实现了拖动缩放功能。如果您不熟悉它(这很可能),InfoVis是一个js库,它将图形和其他可视化呈现到HTML5画布中 我对InfoVis的core.js做了很多修改,以自定义外观和功能,这就是我计划实现拖动缩放的地方 我正在处理的.html页面加载InfoVis核心和它自己的.js文件,并带有标记 在InfoV

在我目前正在开发的一个web应用程序中,我遇到了一些处理javascript文档可见性的奇怪问题。在这个应用程序中,我有一个div,它包含一个InfoVis图,表示节点和边的网络,我为它实现了拖动缩放功能。如果您不熟悉它(这很可能),InfoVis是一个js库,它将图形和其他可视化呈现到HTML5画布中

我对InfoVis的core.js做了很多修改,以自定义外观和功能,这就是我计划实现拖动缩放的地方

我正在处理的.html页面加载InfoVis核心和它自己的.js文件,并带有
标记

在InfoVis核心中,为画布背景定义
onMouseDown:function(e){alert(“click”);}
的效果与预期一样,但是,当涉及到修改div(在实际的.html文件中实例化并在.css文件中设置样式)时,如下所示:

onMouseDown: function(e) {
  e = e || window.event;
  dragging = true;
  $("#dragZoom")[0].style = "display: block; width: 0px; height: 0px; left: "+e.clientX+"; top: "+e.clientY+";";
}
要设置div的新样式,
$(“#dragZoom”)
[0]
中未定义。换句话说,javscript块看不到文档中的div

但是,如果我在另一个.js文件(不是InfoVis核心)中定义一个函数
function foo(){alert($(“#dragZoom”)[0])}
,我可以这样调用foo()

onMouseDown: function(e) {
  foo();
}
foo()可以访问div


当两个.js文件以相同的方式加载时,为什么在一个.js文件中可以看到这一点而在另一个文件中看不到这一点。。?这并没有阻碍我完成任何事情,但我觉得这很奇怪,我想知道到底发生了什么。谢谢你提供的任何信息

$(“#dragZoom”)不需要[0]为什么不需要?它不返回所有匹配项的集合吗?如果我只需要第一个(唯一)元素,我不应该这样做吗?ID应该是唯一的,因此不应该有多个。对,但是jquery中的$(string)函数总是返回一个集合。Doing$(“.class”)返回类名“class”的所有元素。