方法#1。下面是测试字符串是否包含 HTML 数据的简单函数:
function isHTML(str) {
var a = document.createElement('div');
a.innerHTML = str;
for (var c = a.childNodes, i = c.length; i--; ) {
if (c[i].nodeType == 1) return true;
}
return false;
}
这个想法是允许浏览器DOM解析器决定提供的字符串是否看起来像HTML。如您所见,它只是检查( of 1)。ELEMENT_NODE
nodeType
我做了几个测试,看起来它的工作原理:
isHTML('<a>this is a string</a>') // true
isHTML('this is a string') // false
isHTML('this is a <b>string</b>') // true
此解决方案将正确检测HTML字符串,但是它具有副作用,即在innerHTML中解析后,img / vide /等标记将开始下载资源。
方法#2。另一种方法使用 DOMParser 并且没有加载资源的副作用:
function isHTML(str) {
var doc = new DOMParser().parseFromString(str, "text/html");
return Array.from(doc.body.childNodes).some(node => node.nodeType === 1);
}
注意:
1. Array.from
是 ES2015 方法,可以替换为 [].slice.call(doc.body.childNodes)
.
2.箭头函数在某些
调用中可以替换为通常的匿名函数。