วิธีที่ # 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
จาก 1)
ฉันทำการทดสอบสองสามครั้งและดูเหมือนว่าจะได้ผล:
isHTML('<a>this is a string</a>')
isHTML('this is a string')
isHTML('this is a <b>string</b>')
โซลูชันนี้จะตรวจจับสตริง 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
โทรสามารถถูกแทนที่ด้วยฟังก์ชันไม่ระบุตัวตนตามปกติ