如何使用 Javascript 删除 HTML 元素?

IT技术 javascript html
2021-02-04 20:03:21

我是一个完全的新手。有人可以告诉我如何使用原始 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);
}

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

6个回答

发生的事情是表单正在提交,因此页面正在刷新(使用其原始内容)。您正在处理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;
    }
}

...然后pageInit();script页面末尾的标签body(就在结束</body>标签之前)或从window load事件内部调用,尽管这发生在页面加载周期的后期,因此通常不适合连接事件处理程序(例如,它所有图像最终加载发生)。

请注意,我不得不进行一些处理来处理浏览器差异。您可能需要一个用于连接事件的函数,这样您就不必每次都重复该逻辑。或者考虑使用像jQueryPrototypeYUIClosure其他几个库这样的库来为您消除这些浏览器差异。这是非常重要的了解底层的东西怎么回事,两者在JavaScript的基本面和DOM基本面方面,但库处理很多不一致的,同时还提供了很多方便的工具-像挂钩事件处理程序的手段涉及浏览器差异。它们中的大多数还提供了一种设置函数的方法(例如pageInit) 在 DOM 准备好被操纵时立即运行,早在window load触发之前

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

就这样做 element.remove();

在这里试试看

http://jsfiddle.net/4WGRP/

小心这一点,因为这似乎是一个相当新的补充,并且没有完整的浏览器支持,即 IE 和 FF 版本 22 及更早版本(red-team-design.com/...)。
2021-03-24 20:03:21
我个人会再等 5 年才能使用它
2021-03-28 20:03:21
好吧,现在似乎支持失败caniuse.com/#search=remove我会接受现在使用它。如果您绝对需要支持 IE11,我想可以轻松构建一个 polyfill...
2021-03-31 20:03:21
编写面向未来的代码比过去的编程要好。节省自己的维护时间,并使用.remove()
2021-04-04 20:03:21

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

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

查看Mozilla 开发人员中心以获得基本的 html 和 javascript 资源

我将您的链接从 W3Schools 更改为 Mozilla 开发人员中心。看看w3fools.com我的推理......除此之外,很好的答案:)
2021-03-12 20:03:21
@Alastair Pitts - 没关系。我只想将 PO 指向 html 和 js 基本教程..
2021-03-20 20:03:21

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

它重新出现是因为您的提交按钮重新加载了页面。为防止这种行为的最简单的方法是将添加return falseonclick像这样:

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