Javascript 单击除一个元素之外的HTML,而不使用jQuery

Javascript 单击除一个元素之外的HTML,而不使用jQuery,javascript,html,dom,onclick,Javascript,Html,Dom,Onclick,我向我们展示代码: (function (){ var element = document.getElementById('bar'), hideElement = document.getElementById('foo'), var html = document.getElementsByTagName('html')[0]; tool.onclick = function() { hideElement.style.display = 'block'; ht

我向我们展示代码:

(function (){
  var element = document.getElementById('bar'), hideElement = document.getElementById('foo'),
  var html = document.getElementsByTagName('html')[0];
  tool.onclick = function() {
    hideElement.style.display = 'block';
    html.onclick = function() {
      hideElement.style.display = 'none';
    }
  }
})();
这段代码工作正常,但是,在单击html之后,我无法重新打开隐藏的元素

我想单击html元素并给hideElement指定display:none,然后单击元素id=“bar”,给隐藏的元素display:block,但是不要单击元素foo,而是单击html元素。我能做什么

哦,我需要没有JQUERY的帮助,谢谢:)


编辑:类似这样的内容:,但如果没有JQuery,

首先,您似乎不会在我能看到的任何地方定义
工具

其次,您在
hideElement.display
中忘记了
.style
(应该是
hideElement.style.display

第三,
document.getElementsByTagName('html')[0]
是多余的。只需使用
document.documentElement
即可。

更改

html.onclick = function() {
  hideElement.display = 'none';
}


我不确定它是否能回答你的问题,但这里是:如何处理身体上的事件,除了一个元素:

document.documentElement.onclick = function(e) {
    var evt = e || window.event, // IE...
        target = evt.target || evt.srcElement // IE again...
    // There, "target" is the element clicked. See where I'm going?
    if (target.id !== "foo") {
        // Do w/e you want if the page was clicked, except for "foo"
    }
}

这就是“事件冒泡”的概念。您可以一次侦听一个元素及其所有子元素,并按照上面代码中的指定获取目标。

是否输入错误
hideElement.display
而不是
hideElement.style.display
?这只是一个错误,但这不是我需要的。这个错误足以打破它。编程中没有“只是一个错误”这回事。很高兴它适合你。但要注意跨浏览器兼容性。在一个完美的世界里,
var target=e.target
就足够了。但是IE不喜欢将
e
作为参数传递(因此我们使用
window.event
),而FF的旧版本不喜欢
evt.target
(因此我们使用
evt.srcement
)。
e.srcement
应该是
evt.srcement
,并且
.srcement
是IE属性,而不是FF。很确定FF总是有
.target
.Oops,打字错误。我对
srcElement
的看法不好!你确实是对的:)我建议为
evt
的存在添加一个if块。我今天在歌剧中被这句话咬了一口。你能把我的答案编辑一下添加进去吗?我不知道该在哪里添加这个。
document.documentElement.onclick = function(e) {
    var evt = e || window.event, // IE...
        target = evt.target || evt.srcElement // IE again...
    // There, "target" is the element clicked. See where I'm going?
    if (target.id !== "foo") {
        // Do w/e you want if the page was clicked, except for "foo"
    }
}