下面小編就為大家?guī)?lái)一篇在JavaScript中對(duì)HTML進(jìn)行反轉(zhuǎn)義詳解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。
在JavaScript中對(duì)字符串進(jìn)行轉(zhuǎn)義和反轉(zhuǎn)義操作,常用的方法莫過(guò)于使用encodeURI (decodeURI)、encodeURIComponent (decodeURIComponent)這幾個(gè)方法,具體使用方法和區(qū)別。
但是如何在JavaScript中對(duì)HTML進(jìn)行反轉(zhuǎn)義操作呢?例如下面這段代碼:
var jsonData = {
title: "<%= data.name? data.name : title %>",
desc: "<%= data.content? data.content : '' %>",
image: "<%- data.img? data.img : '' %>"
};
其中<%= %>包起來(lái)的部分是從服務(wù)端返回的值(上例中的代碼取自Node.js中Express的ejs模板的代碼)。如果從服務(wù)端返回的字符串中包含有引號(hào),例如單引號(hào)或者雙引號(hào),那上述這段JS代碼在瀏覽器中解釋的時(shí)候會(huì)出現(xiàn)錯(cuò)誤。如何解決這個(gè)問(wèn)題呢?
其基本思路是通過(guò)頁(yè)面上DOM元素的innerHTML屬性將字符串進(jìn)行HTML反轉(zhuǎn)義,然后將值返回給JavaScript的變量。看下面兩段代碼:
1. 原生JavaScript寫(xiě)法:
function htmlDecode(input){
var e = document.createElement('div');
e.innerHTML = input;
return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue;
}
htmlDecode("<img src='myimage.jpg'>");
2. JQuery寫(xiě)法:
function htmlDecode(value){
return $('<div/>').html(value).text();
}
第一個(gè)函數(shù)使用原生的JavaScript方法創(chuàng)建一個(gè)DIV元素,然后將需要反轉(zhuǎn)義的字符串賦值給它的innerHTML屬性,最后返回DIV元素的nodeValue屬性的值。第二個(gè)函數(shù)則使用JQuery的方法,其基本原理和第一個(gè)函數(shù)相同。由于DIV元素都只是在內(nèi)存中創(chuàng)建,并未append或inert到頁(yè)面上,所以不會(huì)對(duì)現(xiàn)有的頁(yè)面產(chǎn)生任何影響。
最后,我們將一開(kāi)始的那段代碼改成下面的這種方式:
var jsonData = {
title: $('<div/>').html("<%= data.name? data.name : title %>").text(),
desc: $('<div/>').html("<%= data.nontent? data.nontent : '' %>").text(),
image: "<%- data.img? data.img : '' %>"
};
這樣便可以在JavaScript中對(duì)服務(wù)器端返回的字符串進(jìn)行HTML反轉(zhuǎn)義操作了。
以上這篇在JavaScript中對(duì)HTML進(jìn)行反轉(zhuǎn)義詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考