【问题标题】:DOMParser attribute with no value issue没有值问题的 DOMParser 属性
【发布时间】:2021-07-22 03:28:48
【问题描述】:

我正在尝试将 HTML 字符串解析为 DOM:

str = '<script src="demo_defer.js" defer></script>'; 
dom = new DOMParser().parseFromString(str, 'text/html'); 
console.log(dom.body.innerHTML);

输出这个:

<script src="demo_defer.js" defer=""></script>

同理,字符串如下:

<IfModule mod_security2.c>
  #SecRuleEngine Off
</IfModule>

固定为:

<ifmodule mod_security2.c="">
  #SecRuleEngine Off
</ifmodule>

如何阻止 DOMParser 修复 HTML? 如何保留原始属性,没有默认的空值?

【问题讨论】:

  • 怀疑你能否解决这个问题。
  • 大约 20 到 25 年前曾经有一种方法可以读回 HTML 流...... - 不记得如何了。对不起。但现在,最好的办法是一开始就不解析流。
  • 前提错了,DOMParser 生成的不是字符串,而是文档树。无论您用来序列化生成的 DOM 节点是否添加了这些 ="",对于 DOM,无论是否在这里,它们都是相同的。
  • @epascarello :) 可能是正则表达式 :)
  • 还有……这有什么变化? DOMParser 不是罪魁祸首,只是你不应该将你的字符串解析为 DOM 来做你想做的事。所以问问你真正想做的是什么:你遇到了 X-Y 问题

标签: javascript html dom code-snippets domparser


【解决方案1】:

好吧.. 我认为这不是正确的方法,但是这个临时代码可能会起作用: 只需从字符串中删除 '=' 和 ' " ' 符号

    str2 = '<IfModule mod_security2.c>#SecRuleEngine Off</IfModule>';
dom2 = new DOMParser().parseFromString(str2, 'text/html');
console.log(dom2.documentElement.innerHTML);
let result = dom2.documentElement.innerHTML;
let spRes = result.split('')

let newArr = []
spRes.filter(el => {
    if (el != '=' && el != '"') {
        newArr.push(el)

    }
})

let strAgain = newArr.join('');
console.log(strAgain);

【讨论】:

  • dom2.documentElement.innerHTML.replace(/=\"\"/g, '');做同样的事情?
猜你喜欢
  • 2011-02-17
  • 2012-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 2022-01-07
相关资源
最近更新 更多