方法#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などの副作用があります。タグは、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
呼び出し中のアロー関数を通常の無名関数に置き換えることができます。