最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

將HTML的左右尖括號等轉(zhuǎn)義成實(shí)體形式的兩種實(shí)現(xiàn)方式

 更新時(shí)間:2014年05月04日 10:29:12   作者:  
這篇文章主要介紹了將HTML的左右尖括號等轉(zhuǎn)義成實(shí)體形式的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
前端開發(fā)工作中,經(jīng)常需要將HTML的左右尖括號等轉(zhuǎn)義成實(shí)體形式。我們不能把<,>,&等直接顯示在最終看到的網(wǎng)頁里。需要將其轉(zhuǎn)義后才能在網(wǎng)頁上顯示。

轉(zhuǎn)義字符(Escape Sequence)也稱字符實(shí)體(Character Entity)。定義轉(zhuǎn)義字符串的主要原因是

“<”和“>”等符號已經(jīng)用來表示HTML TAG,因此不能直接當(dāng)作文本中的符號來使用。但有時(shí)需求是在HTML頁面上使用這些符號,所以需要定義它的轉(zhuǎn)義字符串。
有些字符在ASCII字符集中沒有定義(如版權(quán)符號“©”)。因此需要使用轉(zhuǎn)義字符(“©”對應(yīng)的轉(zhuǎn)義字符是“&copy;”)來表示。

這里提供兩個(gè)函數(shù)escape和unescape,分別實(shí)現(xiàn)將HTML轉(zhuǎn)義為實(shí)體和回轉(zhuǎn)。

方式一、一個(gè)映射表+正則替換
復(fù)制代碼 代碼如下:

var keys = Object.keys || function(obj) {
obj = Object(obj)
var arr = []
for (var a in obj) arr.push(a)
return arr
}
var invert = function(obj) {
obj = Object(obj)
var result = {}
for (var a in obj) result[obj[a]] = a
return result
}
var entityMap = {
escape: {
'&': '&',
'<': '<',
'>': '>',
'"': '"',
"'": '''
}
}
entityMap.unescape = invert(entityMap.escape)
var entityReg = {
escape: RegExp('[' + keys(entityMap.escape).join('') + ']', 'g'),
unescape: RegExp('(' + keys(entityMap.unescape).join('|') + ')', 'g')
}

// 將HTML轉(zhuǎn)義為實(shí)體
function escape(html) {
if (typeof html !== 'string') return ''
return html.replace(entityReg.escape, function(match) {
return entityMap.escape[match]
})
}
// 將實(shí)體轉(zhuǎn)回為HTML
function unescape(str) {
if (typeof str !== 'string') return ''
return str.replace(entityReg.unescape, function(match) {
return entityMap.unescape[match]
})
}

方式二、利用瀏覽器DOM API
復(fù)制代碼 代碼如下:

// 將HTML轉(zhuǎn)義為實(shí)體
function escape(html){
var elem = document.createElement('div')
var txt = document.createTextNode(html)
elem.appendChild(txt)
return elem.innerHTML;
}
// 將實(shí)體轉(zhuǎn)回為HTML
function unescape(str) {
var elem = document.createElement('div')
elem.innerHTML = str
return elem.innerText || elem.textContent
}

有個(gè)缺陷是只能轉(zhuǎn)義“< > & ”,對于單引號,雙引號都不轉(zhuǎn)義。另外一些非ASCII也不能轉(zhuǎn)義。選擇時(shí)須注意。

比較:

方式1 代碼量較大,但靈活性,完整性都比方式2強(qiáng)。可根據(jù)需求添加或減少映射表entityMap,且可以運(yùn)行在任意JS環(huán)境中。

方式2 為hack方式,代碼量少很多,利用瀏覽器內(nèi)部API就行了轉(zhuǎn)義和轉(zhuǎn)回(主流瀏覽器都支持)。不具完整性,很明顯只能在瀏覽器環(huán)境中使用(比如不能在Node.js中跑)。

相關(guān)文章

  • Javascript調(diào)用函數(shù)方法的幾種方式介紹

    Javascript調(diào)用函數(shù)方法的幾種方式介紹

    這篇文章主要介紹了Javascript調(diào)用函數(shù)方法的幾種方式介紹,本文講解了func()、(function(arg){})(window)、func.bind(sth)()、func.call()、func.apply()等5種方式,需要的朋友可以參考下
    2015-03-03
  • JS 數(shù)字轉(zhuǎn)換研究總結(jié)

    JS 數(shù)字轉(zhuǎn)換研究總結(jié)

    這篇文章主要介紹了JS 數(shù)字轉(zhuǎn)換實(shí)現(xiàn)方法,需要的朋友可以參考下
    2013-12-12
  • Javascript創(chuàng)建Silverlight Plugin以及自定義nonSilverlight和lowSilverlight樣式

    Javascript創(chuàng)建Silverlight Plugin以及自定義nonSilverlight和lowSilverl

    我們在使用Visual Studio IDE創(chuàng)建Silverlight工程時(shí),默認(rèn)情況下都會自動(dòng)生成一個(gè)用于調(diào)試和預(yù)覽Silverlight的Web工程,該工程包含了html和aspx頁面,以及Silverlight.js腳本文件。
    2010-06-06
  • Js+php實(shí)現(xiàn)異步拖拽上傳文件

    Js+php實(shí)現(xiàn)異步拖拽上傳文件

    本文給大家分享的是使用php結(jié)合js實(shí)現(xiàn)異步拖拽上傳文件的代碼,及示例,有需要的小伙伴可以參考下。
    2015-06-06
  • js 定時(shí)器setTimeout無法調(diào)用局部變量的解決辦法

    js 定時(shí)器setTimeout無法調(diào)用局部變量的解決辦法

    javascript中定時(shí)器setTimeout無法調(diào)用局部變量,只需要將setTimeout的第一個(gè)參數(shù)改成函數(shù)對象,而不是字符串,就可以了
    2013-11-11
  • 最新評論

    二连浩特市| 怀仁县| 伊春市| 陆良县| 泽库县| 清涧县| 旅游| 吴忠市| 榆中县| 衢州市| 利辛县| 安吉县| 大城县| 平塘县| 广宁县| 饶河县| 南郑县| 莲花县| 乌恰县| 通城县| 镶黄旗| 合阳县| 福州市| 清水县| 南溪县| 隆化县| 宣恩县| 永善县| 雷山县| 阳曲县| 泉州市| 梅州市| 平利县| 云霄县| 深圳市| 永昌县| 安平县| 建德市| 高密市| 南溪县| 镇康县|