首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用TypeScript从HTML元素及其子元素中删除所有事件

使用TypeScript从HTML元素及其子元素中删除所有事件
EN

Stack Overflow用户
提问于 2018-06-24 07:33:15
回答 3查看 403关注 0票数 -2

我有未知的HTML,可能会改变每次页面加载,它是从一个API检索。

如何删除其中的所有事件?

html:

代码语言:javascript
复制
 <div id="content">
        <h2 onclick="alert('hi');">Test 1</h2>
        <div onmouseover="alert('hi')">Test 2</div>
 </div>

我想让它成为

代码语言:javascript
复制
<div id="content">
            <h2>Test 1</h2>
            <div>Test 2</div>
</div>

我已经寻找并找到了一个解决方案,但它对我不起作用

代码语言:javascript
复制
var el = document.getElementById('content'),
    elClone = el.cloneNode(true);

el.parentNode.replaceChild(elClone, el);

elClone元素仍然包含事件。如何从给定的html块中删除所有事件?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-24 08:26:24

您可以使用类似以下内容来删除属性:

代码语言:javascript
复制
function removeOnAttributes(element) 
{
  for (var attribute of element.attributes) 
    if (/^on/i.test(attribute.name)) 
      element.removeAttribute(attribute.name);

  for (var element of element.children) 
    removeOnAttributes(element);
}

removeOnAttributes( content );

content.outerHTML = content.outerHTML; // to remove the other non-atribute event handlers

console.log( content.outerHTML );
代码语言:javascript
复制
<div id="content">
        <h2 onclick="alert('hi');">Test 1</h2>
        <div onmouseover="alert('hi')">Test 2</div>
 </div>

票数 1
EN

Stack Overflow用户

发布于 2018-06-24 07:42:49

所以,如果我没理解错你的问题,你希望在你的JavaScript中有一个函数来实现这个功能:

代码语言:javascript
复制
<div id="content">
    <h2 onclick="alert('hi');">Test 1</h2>
    <div onmouseover="alert('hi')">Test 2</div>
</div>

如下所示:

代码语言:javascript
复制
<div id="content">
    <h2>Test 1</h2>
    <div>Test 2</div>
</div>

你所要做的就是:

首先向您的元素添加ID(例如,id="test1"id="test2")

代码语言:javascript
复制
function funcname() {
    document.getElementById("test1").removeAttribute("onclick");
    document.getELementById("test2").removeAttribute("onmouseover");
}

然后在你想要的时候调用你的函数,你就设置好了!

即使您不想像我这样做,您所需要的就是removeAttribute();函数。

票数 0
EN

Stack Overflow用户

发布于 2018-06-24 08:10:35

您说响应来自一个API,然后将其附加到html。你可以看看CSP header它可能适合你的情况,你可以完全删除内联脚本。

无论哪种方式,我相信也有解析器可以帮你做到这一点。

看一看https://code.google.com/archive/p/google-caja/wikis/JsHtmlSanitizer.wiki

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51005848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档