【问题标题】:Get all inline events from HTML string从 HTML 字符串中获取所有内联事件
【发布时间】:2011-12-08 15:22:59
【问题描述】:

我正在尝试从 HTML <body> 字符串中获取所有内联事件标签的列表,我该如何做到这一点?

例子:

 <a onclick='foo()'></a>

我想提取onclick='foo()'

是否可以使用 REGEX 或任何其他替代方法?

【问题讨论】:

  • 是的,我已经读过,想知道是否有其他选择。虽然事件在内联方面非常恒定,但 REGEX 可能会起作用。
  • 您可以遍历每个元素并访问其onXXXXX 属性...
  • 不能,因为我在 Node.js 中执行此操作,而 JSDOM 模块讽刺地剥离了内联事件。

标签: javascript regex parsing dom


【解决方案1】:

这是一个。事件将是第 1 组:

<\w+[^>]+(on[a-z]+=["'][^"']+["'])[^>]*>

【讨论】:

  • 这很奇怪,对我来说很好用。您是否尝试过不区分大小写的搜索?
  • 如果问题出在组上,顺便说一句,您可以使用更简单的正则表达式,例如 (on[a-z]+=["'][^"']+["'])(?=[^&gt;]*&gt;)
【解决方案2】:

您应该让浏览器进行解析,例如这样:

var doc = document.implementation.createHTMLDocument('');
doc.documentElement.innerHTML = '<body onload="alert(1)"></body>'; // your string here

然后使用 DOM 方法获取on* 属性:

var attributes = Array.prototype.slice.call(doc.body.attributes);
for (var i = 0; i < attributes.length; i++) {
    if (/^on/.test(attributes[i].name)) {
        console.log(attributes[i].name, attributes[i].value);
    }
}

【讨论】:

  • 我同意如果你真的在浏览器中,你应该使用 DOM 或一些库。 Otoh,如果您正在搜索内联事件处理程序的代码以用其他内容替换它们,那么正则表达式可能更容易。
  • 我需要这个的原因是我在 node.js 中这样做,讽刺的是 jsdom 模块忽略了内联事件。
猜你喜欢
  • 2020-06-16
  • 2012-05-15
  • 1970-01-01
  • 2010-11-18
  • 2019-11-16
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
相关资源
最近更新 更多