方法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。如您所见,它只需检查ELEMENT_NODE
(nodeType
of 1)。
我进行了一些测试,看起来很有效:
isHTML('<a>this is a string</a>') // true
isHTML('this is a string') // false
isHTML('this is a <b>string</b>') // true
此解决方案将正确检测HTML字符串,但是它具有img / vide / etc的副作用。一旦在innerHTML中进行了解析,标记将开始下载资源。
方法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. some
通话中的箭头功能可以替换为通常的匿名功能。