javascript - 如何清除内部 HTML

标签 javascript html innerhtml

我已经摆弄了一段时间,但它不起作用,我也不知道为什么。请帮忙。这是我所拥有的:

<html>
<head>
    <title>lala</title>
</head>
<body>
    <h1 onmouseover="go('The dog is in its shed')" onmouseout="clear()">lalala</h1>
    <div id="goy"></div>
    <script type="text/javascript">
    function go(what) {
        document.getElementById("goy").innerHTML = what;
    }
    function clear() {
        document.getElementById("goy").innerHTML = "";
    }
    </script>
</body>
</html>

鼠标悬停有效并在 div 中显示文本,但是当我将鼠标移出 h1 标签时,文本停留在那里,我不知道为什么,帮助将不胜感激。

最佳答案

问题似乎是全局符号 clear 已在使用中,您的函数无法成功覆盖它。如果您将该名称更改为其他名称(我使用了 blah),它就可以正常工作:

直播:Version using clear which fails | Version using blah which works

<html>
<head>
    <title>lala</title>
</head>
<body>
    <h1 onmouseover="go('The dog is in its shed')" onmouseout="blah()">lalala</h1>
    <div id="goy"></div>
    <script type="text/javascript">
    function go(what) {
        document.getElementById("goy").innerHTML = what;
    }
    function blah() {
        document.getElementById("goy").innerHTML = "";
    }
    </script>
</body>
</html>

这很好地说明了基本原则:尽可能避免使用全局变量。浏览器中的全局命名空间难以置信拥挤,当发生冲突时,您会遇到像这样的奇怪错误。

一个推论是不要使用旧式 onxyz=... 属性来连接事件处理程序,因为它们需要全局变量。相反,至少使用代码来连接:Live Copy

<html>
<head>
    <title>lala</title>
</head>
<body>
    <h1 id="the-header">lalala</h1>
    <div id="goy"></div>
    <script type="text/javascript">
      // Scoping function makes the declarations within
      // it *not* globals
      (function(){
        var header = document.getElementById("the-header");
        header.onmouseover = function() {
          go('The dog is in its shed');
        };
        header.onmouseout = clear;

        function go(what) {
          document.getElementById("goy").innerHTML = what;
        }
        function clear() {
          document.getElementById("goy").innerHTML = "";
        }
      })();
    </script>
</body>
</html>

...甚至更好的是,使用 DOM2 的 addEventListener(或 IE8 及更早版本的 attachEvent),这样您就可以为一个元素上的事件设置多个处理程序。

关于javascript - 如何清除内部 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22593759/

相关文章:

html - 实现动画边框底部的正确方法是什么?

jquery - 使用 jQuery 返回颜色名称

php - 在不从 PHP 脚本解析到 ajax 脚本的情况下返回 native 文本

javascript - 无法使用 vuetify 在 Vue js 中单击按钮来调用函数

javascript - 是否可以从 JavaScript 关闭浏览器窗口?

javascript - 提交后如何关闭 fancybox iframe

javascript - 从 JSON 中获取 KEY

html - 需要在 html anchor 上单击两次才能转到 id 或名称

javascript - 替换 innerHTML 并返回到保留事件的原始内容

javascript - 创建一个包含 Doctype 的新 HTML 文档