方法 #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
、通常の無名関数に置き換えることができます。