如何在脚本中获取HTML标签数据?

Hem*_*ath 1 html javascript

我有一个字符串:

var str = `<ul class="errorlist"><li>Enter a valid email address.</li></ul>`;
Run Code Online (Sandbox Code Playgroud)

从该字符串中,如何提取子字符串:

'Enter a valid email address.'
Run Code Online (Sandbox Code Playgroud)

变成另一个变量?

Cer*_*nce 7

如果文本不可信,则最安全(并且可能最优雅)的选项是用于DOMParser将文本转换为文档,然后li在文档中选择:

const str = `<ul class="errorlist"><li>Enter a valid email address.</li></ul>`;
const doc = new DOMParser().parseFromString(str, 'text/html');
const a = doc.querySelector('li').textContent;
console.log(a);
Run Code Online (Sandbox Code Playgroud)

您可能会想使用innerHTML新创建的元素的:

const str = `<ul class="errorlist"><li>Enter a valid email address.</li></ul>`;
const container = document.createElement('div');
container.innerHTML = str;
const a = container.querySelector('li').textContent;
console.log(a);
Run Code Online (Sandbox Code Playgroud)

但这是不安全的,因为error可以执行内联处理程序:

const str = `<ul class="errorlist"><li><img src="" onerror="alert('evil')">Enter a valid email address.</li></ul>`;
const container = document.createElement('div');
container.innerHTML = str;
const a = container.querySelector('li').textContent;
console.log(a);
Run Code Online (Sandbox Code Playgroud)

DOMParser 没有相同的漏洞-即使输入字符串不可信任,您也可以安全地使用它。

const str = `<ul class="errorlist"><li><img src="" onerror="alert('evil')">Enter a valid email address.</li></ul>`;
const doc = new DOMParser().parseFromString(str, 'text/html');
const a = doc.querySelector('li').textContent;
console.log(a);
Run Code Online (Sandbox Code Playgroud)