如何使用Javascript删除HTML元素?

New*_*der 117 html javascript

我是个新手.有人可以告诉我如何使用原始的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>
Run Code Online (Sandbox Code Playgroud)

myscripts.js

function removeDummy() {
 var elem = document.getElementById('dummy');
 elem.parentNode.removeChild(elem);
}
Run Code Online (Sandbox Code Playgroud)

单击提交按钮时会发生什么,它会在很短的时间内消失,然后立即显示回来.我想在单击按钮时完全删除元素.

T.J*_*der 176

发生的事情是表单已提交,因此页面正在刷新(包含其原始内容).您正在click通过提交按钮处理该事件.

如果要删除元素而不提交表单,请在表单上处理submit事件,然后false从处理程序返回:

HTML:

<form  onsubmit="return removeDummy(); ">
    <input type="submit" value="Remove DUMMY"/>
</form>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}
Run Code Online (Sandbox Code Playgroud)

但是你根本不需要(或想要)一个表格,而不是它的唯一目的是删除虚拟div.代替:

HTML:

<input type="button" value="Remove DUMMY" onclick="removeDummy()" />
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function removeDummy() {
    var elem = document.getElementById('dummy');
    elem.parentNode.removeChild(elem);
    return false;
}
Run Code Online (Sandbox Code Playgroud)

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

HTML:

<input id='btnRemoveDummy' type="button" value="Remove DUMMY"/>
Run Code Online (Sandbox Code Playgroud)

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

...然后调用pageInit();从一个script标签,在你的页面的最末端body(在结束之前</body>标签),或者从内部window load事件,虽然发生这种情况非常晚在页面加载周期,所以通常不利于挂钩事件处理程序(例如,在最终加载所有图像之后).

请注意,我必须处理一些处理浏览器差异的处理.您可能需要一个用于连接事件的函数,因此您不必每次都重复该逻辑.或者考虑使用像jQuery,Prototype,YUI,Closure其他任何一个库来为你平滑浏览器差异.这是非常重要的了解底层的东西怎么回事,两者在JavaScript的基本面和DOM基本面方面,但库处理很多不一致的,同时还提供了很多方便的工具-像挂钩事件处理与交易的手段浏览器差异.它们中的大多数还提供了一种方法来设置一个函数(如pageInit),一旦DOM准备好被操作,就可以在window load火灾之前运行.

  • 为什么不只是elem.remove(); (2认同)

Muh*_*mer 32

就这样做吧 element.remove();

试试看这里

http://jsfiddle.net/4WGRP/

  • 小心这一点,因为这似乎是一个相当新的补充,并没有完整的浏览器支持,即IE和FF版本22及更早版本(http://www.red-team-design.com/removing-an-element-与-纯JavaScript的去除方法). (5认同)
  • 编写面向未来的代码比编写过去更好.节省自己的维护时间,并使用`.remove()` (3认同)
  • 嗯,这似乎现在得到了很好的支持:http://caniuse.com/#search=remove.我现在接受使用它.如果你绝对需要支持IE11,我想可以很容易地构建一个polyfill ... (2认同)

Cod*_*awk 9

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

<form>
  <input type="button" value="Remove DUMMY" onclick="removeDummy(); "/>
 </form>
Run Code Online (Sandbox Code Playgroud)

结帐Mozilla开发人员中心获取基本的html和javascript资源

  • @Alastair Pitts - 没关系.我只想将PO指向html和js基础教程.. (2认同)

Pav*_*Pav 8

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


mVC*_*Chr 5

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

<input type="submit" value="Remove DUMMY" onclick="removeDummy(); return false;" />
Run Code Online (Sandbox Code Playgroud)


小智 5

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

document.getElementById("dummy").remove();
Run Code Online (Sandbox Code Playgroud)

它有望删除元素/按钮。


e-m*_*tiv 5

索引.html

<input id="suby" type="submit" value="Remove DUMMY"/>
Run Code Online (Sandbox Code Playgroud)

我的脚本.js

document.addEventListener("DOMContentLoaded", {
//Do this AFTER elements are loaded

    document.getElementById("suby").addEventListener("click", e => {
        document.getElementById("dummy").remove()
    })

})
Run Code Online (Sandbox Code Playgroud)