背景
在
uniApp
项目中,后端返回了编码内容,打印的时候可以看到有反斜杠存在。方法一,使用替换的方式把反斜杠去掉,失败;方法二,使用JavaScript
解码器decodeURIComponent
方法,失败;最后使用创建标签的方式获取内容进行了数据渲染。
代码
function htmlDecode(el) {
let temp = document.createElement('div'),
output = undefined;
temp.innerHTML = el;
output = temp.innerText || temp.textContent;
temp = null;
return output;
}
let tagText = "<p>资讯<span style=\"color: rgb(37, 36, 36); font-family: 微软雅黑, \" microsoft=\"\" font-size:=\"\" text-align:=\"\" background-color:=\"\">内容</span></p>";
console.log('打印后没有斜杠: ', tagText);
// <p>资讯<span style="color: rgb(37, 36, 36); font-family: 微软雅黑, " microsoft="" font-size:="" text-align:="" background-color:="">内容</span></p>
console.log('获取处理后的标签元素内容: ', htmlDecode(tagText));
// 资讯内容
效果图
decodeURIComponent
w3school
decodeURIComponent()
函数对URI
组件进行解码。
请使用encodeURIComponent()
函数对URI
组件进行编码。
MDN
decodeURIComponent()
方法用于解码由encodeURIComponent方法或者其他类似方法编码的部分统一资源标识符(URI
)。
textContent
w3school
textContent
属性设置或返回指定节点的文本内容,以及它的所有后代。
如果您设置了textContent
属性,会删除所有子节点,并被替换为包含给定字符串的一个单独的文本节点。
有时,此属性可用于取代nodeValue
属性,但是请记住此属性同时会返回所有子节点的文本。
MDN
Node接口的textContent
属性表示一个节点及其后代的文本内容。
textContent
和HTMLElement.innerText容易混淆,但这两个属性在重要方面有不同之处 。// 设置值 document.querySelector('#ids').textContent = 'null'; // 获取值 console.log(document.querySelector('#ids').textContent);
innerText
w3school
innerText
属性设置或返回元素的文本内容。
设置innerText
属性时,所有子节点都将被删除并仅由一个新文本节点替换。
MDN
HTMLElement接口的innerText
属性表示一个节点及其后代所渲染文本的内容。
作为一个getter
,它近似于用户用光标突出该元素的内容,然后将其复制到剪贴板上所得到的文本。作为一个setter
,这将用给定的值替换该元素的子元素,并将任何换行符转换为<br>
元素。
innerText
很容易与Node.textContent
混淆,但这两个属性间实际上有很重要的区别。大体来说,innerText
知道文本的渲染外观,而textContent
不知道。// 设置值 document.querySelector('#ids').innerText = 'null'; // 获取值 console.log(document.querySelector('#ids').innerText);
createElement
MDN
在HTML文档中,Document.createElement
方法用于创建一个由标签名称tagName
指定的HTML
元素。如果用户代理无法识别tagName
,则会生成一个未知HTML
元素HTMLUnknownElement。
w3school
createElement
方法创建元素节点。
document
菜鸟教程
当浏览器载入HTML
文档, 它就会成为Document
对象。
Document
对象是HTML
文档的根节点。
Document
对象使我们可以从脚本中对HTML
页面中的所有元素进行访问。
Document
对象是Window
对象的一部分,可通过window.document
属性对其进行访问。
MDN
Document
接口表示任何在浏览器中载入的网页,并作为网页内容的入口,也就是DOM树(en-US)。
DOM
树包含了像<body>、<table>这样的元素,以及大量其他元素。它向网页文档本身提供了全局操作功能,能解决如何获取页面的URL
,如何在文档中创建一个新的元素这样的问题。
EventTarget <= Node <= Document
Document
接口描述了任何类型的文档的通用属性与方法。根据不同的文档类型(例如HTML、XML(en-US)、SVG,……),还能使用更多API
。使用"text/html
"作为内容类型(content type
)的HTML
文档,还实现了HTMLDocument接口,而XML
和SVG
文档则(额外)实现了XMLDocument接口。