【问题标题】:How to remove an HTML element using Javascript?如何使用 Javascript 删除 HTML 元素?
【发布时间】:2011-08-21 10:45:09
【问题描述】:

我是个新手。有人可以告诉我如何使用原始 Javascript 而不是 jQuery 来删除 HTML 元素。

index.html

<html>
<head>
 <script type="text/javascript" src="myscripts.js" > </script>
 <style>
 #dummy {
  min-width: 200px;
  min-height: 200px;
  max-width: 200px;
  max-height: 200px;
  background-color: #fff000;
 }
 </style>
</head>
<body>
 <div id="dummy"></div>

 <form>
  <input type="submit" value="Remove DUMMY" onclick="removeDummy(); "/>
 </form>
</body>

myscripts.js

function removeDummy() {
 var elem = document.getElementById('dummy');
 elem.parentNode.removeChild(elem);
}

当我单击提交按钮时会发生什么,它会在很短的时间内消失,然后立即出现。我想在单击按钮时完全删除元素。

【问题讨论】:

  • 如果我点击它,发现错误并按 stop 怎么办?
  • 对不起,这是话题,但实际上真的很有趣,他/她将他/她命名为“新手编码员”,现在个人资料的声誉在 9000 左右。在“好”中提问昔日”如今真的很赚钱。 :)

标签: javascript html


【解决方案1】:

正在发生的事情是表单正在提交,因此页面正在刷新(使用其原始内容)。您正在处理提交按钮上的click 事件。

如果您想删除元素并且提交表单,请改为处理表单上的submit 事件,并从您的处理程序返回false

HTML:

<form  onsubmit="return removeDummy(); ">
    <input type="submit" value="Remove DUMMY"/>
</form>

JavaScript:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}

但您根本不需要(或不想要)一个表单,如果它的唯一目的是删除虚拟 div。而是:

HTML:

<input type="button" value="Remove DUMMY" onclick="removeDummy()" />

JavaScript:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}

然而,这种设置事件处理程序的方式已经过时了。你似乎有很好的直觉,因为你的 JavaScript 代码在它自己的文件中等等。下一步是更进一步,避免使用onXYZ 属性来连接事件处理程序。相反,在您的 JavaScript 中,您可以使用更新的(大约 2000 年)方式将它们连接起来:

HTML:

<input id='btnRemoveDummy' type="button" value="Remove DUMMY"/>

JavaScript:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}
function pageInit() {
    // Hook up the "remove dummy" button
    var btn = document.getElementById('btnRemoveDummy');
    if (btn.addEventListener) {
        // DOM2 standard
        btn.addEventListener('click', removeDummy, false);
    }
    else if (btn.attachEvent) {
        // IE (IE9 finally supports the above, though)
        btn.attachEvent('onclick', removeDummy);
    }
    else {
        // Really old or non-standard browser, try DOM0
        btn.onclick = removeDummy;
    }
}

...然后从页面末尾的script 标记body(就在结束&lt;/body&gt; 标记之前)调用pageInit();,或从windowload 事件中调用,虽然这发生在页面加载周期中非常晚,因此通常不适合连接事件处理程序(例如,它发生在所有图像最终加载之后)。

请注意,我必须进行一些处理以处理浏览器差异。您可能需要一个用于连接事件的函数,这样您就不必每次都重复该逻辑。或者考虑使用像 jQueryPrototypeYUIClosureany of several others 这样的库来为您消除浏览器的差异。 非常重要了解正在发生的底层内容,包括 JavaScript 基础知识和 DOM 基础知识,但是库处理了很多不一致的问题,并且还提供了很多方便的实用程序——比如连接处理浏览器差异的事件处理程序。它们中的大多数还提供了一种方法来设置函数(如 pageInit),以便在 DOM 准备好被操作时立即运行,早在 window load 触发之前。

【讨论】:

  • 把它改成type="button"或者把return false;放到你的JS函数里
  • @Pav:我想我会坚持提交,因为这只是一个实验性练习。我将做一些使用提交的项目,所以我最好习惯它......无论如何,谢谢你的想法。
  • @Newbie:我添加了一些进一步的注释。
  • 为什么不直接做 elem.remove();
  • @Ghos3t - 有两种方法: 1. 从属性样式处理程序调用的任何函数都必须是全局的,并且全局命名空间已经是真正的 Crowded™ 并且很容易选择一个函数与其他名称冲突的名称(这可以通过使用具有可能唯一名称的对象并将所有处理程序放在其上来解决)。 2. 使用旧的属性样式方式(或分配给元素上的onxyz 属性)仅允许 single 处理程序,如果您分配给属性,则替换以前存在的任何内容,所以和别人玩得不好。 (续)
【解决方案2】:

只要这样做 element.remove();

在这里试试看

http://jsfiddle.net/4WGRP/

【讨论】:

  • 对此要小心,因为这似乎是一个相当新的添加,并且没有完整的浏览器支持,即 IE 和 FF 版本 22 及更早版本 (red-team-design.com/…)。
  • 我个人会再等 5 年才能使用它
  • 好吧,这似乎现在支持失败:caniuse.com/#search=remove。我会接受现在使用它。如果你绝对需要支持 IE11,我想可以很容易地构建一个 polyfill...
  • 编写面向未来的代码比编写过去的代码要好。节省维护时间,使用.remove()
【解决方案3】:

您应该使用 input type="button" 而不是 input type="submit"。

<form>
  <input type="button" value="Remove DUMMY" onclick="removeDummy(); "/>
</form>

结帐Mozilla Developer Center 以获取基本的 html 和 javascript 资源

【讨论】:

  • 我将您的链接从 W3Schools 更改为 Mozilla 开发者中心。看看w3fools.com 我的推理......除此之外,很好的答案:)
  • @Alastair Pitts - 没关系。我只想将 PO 指向 html 和 js 基础教程..
【解决方案4】:

您的 JavaScript 是正确的。您的按钮有 type="submit" 导致页面刷新。

【讨论】:

    【解决方案5】:

    它再次出现是因为您的提交按钮重新加载了页面。防止这种行为的最简单方法是将return false 添加到onclick,如下所示:

    <input type="submit" value="Remove DUMMY" onclick="removeDummy(); return false;" />
    

    【讨论】:

      【解决方案6】:

      index.html

      <input id="suby" type="submit" value="Remove DUMMY"/>
      

      myscripts.js

      document.addEventListener("DOMContentLoaded", {
      //Do this AFTER elements are loaded
      
          document.getElementById("suby").addEventListener("click", e => {
              document.getElementById("dummy").remove()
          })
      
      })
      

      【讨论】:

        【解决方案7】:

        将输入类型更改为“按钮”。作为 T.J. Pav 说,表格正在提交中。你的 Javascript 看起来是正确的,我推荐你尝试非 JQuery 方式:)

        【讨论】:

        • 我想我会坚持提交,因为这只是我未来使用提交的项目的实验练习,所以我最好习惯它......
        【解决方案8】:

        这是正确的代码。可能发生的情况是您的表单正在提交,并且您会看到新页面(元素将再次存在的地方)。

        【讨论】:

          【解决方案9】:

          尝试在您的脚本中运行此代码。

          document.getElementById("dummy").remove();
          

          它有望移除元素/按钮。

          【讨论】:

            【解决方案10】:

            这行得通。如果您想保留按钮,只需从“虚拟”div 中删除按钮即可。

            function removeDummy() {
              var elem = document.getElementById('dummy');
              elem.parentNode.removeChild(elem);
              return false;
            }
            #dummy {
              min-width: 200px;
              min-height: 200px;
              max-width: 200px;
              max-height: 200px;
              background-color: #fff000;
            }
            <div id="dummy">
              <button onclick="removeDummy()">Remove</button>
            </div>

            【讨论】:

              【解决方案11】:

              我也是新手,但是这里有一个简单易行的方法:你可以使用outerHTML,它是整个标签,而不仅仅是一部分:

              EX:&lt;tag id='me'&gt;blahblahblah&lt;/tag&gt; 的内部 HTML 将是 blahblahblah,而外部 HTML 将是全部内容,&lt;tag id='me'&gt;blahblahblah&lt;/tag&gt;


              所以,举个例子,如果你想删除标签,它基本上是在删除它的数据,所以如果你把outerHTML改成一个空字符串,就像删除它一样。
              <body>
                  <p id="myTag">This is going to get removed...</p>
                  <input type="button" onclick="javascript:
                      document.getElementById('myTag').outerHTML = '';//this makes the outerHTML (the whole tag, not what is inside it)
                  " value="Remove Praragraph">
              </body>
              

              相反,如果您不想显示它,您可以在 JS 中使用可见性、不透明度和显示属性设置它的样式。

              document.getElementById('foo').style.visibility = hidden;
              //or
              document.getElementById('foo').style.opacity = 0;
              //or
              document.getElementById('foo').style.display = none;
              



              注意 opacity 使元素仍然显示,只是你看不到它。此外,您可以选择文本、复制、粘贴并执行您通常可以执行的所有操作,即使它是不可见的。
              Visibility 更适合您的情况,但它会留下一个与其应用的元素一样大的空白透明空间。
              我建议您进行显示,具体取决于您制作网页的方式。显示基本上从您的视图中删除元素,但您仍然可以在 DevTools 中看到它。 希望这可以帮助!

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-05-17
                • 2015-10-26
                • 2021-07-29
                • 2020-03-22
                • 2019-06-27
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多