成熟丰满熟妇高潮XXXXX,人妻无码AV中文系列久久兔费 ,国产精品一国产精品,国精品午夜福利视频不卡麻豆

您好,歡迎來(lái)到九壹網(wǎng)。
搜索
您的當(dāng)前位置:首頁(yè)html實(shí)現(xiàn)高亮關(guān)鍵字

html實(shí)現(xiàn)高亮關(guān)鍵字

來(lái)源:九壹網(wǎng)

正則優(yōu)化一:僅處理位于標(biāo)簽內(nèi)的元素

var formatKeyword = text.replace(/[-/\^$*+?.()|[]{}]/g, '\$&') // 轉(zhuǎn)義處理keyword包含的特殊字符,如 /.
var finder = new RegExp(">.*?"++".*?<") // 提取位于標(biāo)簽內(nèi)的文本,避免誤操作 class、id 等
 
element.innerHTML = element.innerHTML.replace(finder,function(matched){
 return matched.replace(text,"<br>"+text+</br>)
})// 對(duì)提取的標(biāo)簽內(nèi)文本進(jìn)行關(guān)鍵字替換

以能解決大多數(shù)問(wèn)題,但依舊存在的問(wèn)題是,只要標(biāo)簽屬性存在類似 < 符號(hào),將會(huì)打破匹配規(guī)則導(dǎo)致正則提取內(nèi)容錯(cuò)誤, HTML5 dataset 可以自定義任意內(nèi)容,故這些特殊字符是無(wú)法避免的。

<div dataset="p>d">替換</div>

(推薦教程:html教程)

正則優(yōu)化二:清除可能影響的標(biāo)簽

<div id="keyword">keyword</div>
 =》將閉合標(biāo)簽用變量替換
 [replaced1]keyword[replaced2]//閉合標(biāo)簽內(nèi) id="keyword" 不會(huì)被處理
 =》
 [replaced1]<b>keyword</b>[replaced2]
 =》將暫存變量 replaced 替換為原先標(biāo)簽
 <div id="keyword"><b>keyword</b></div>

問(wèn)題:如果 [replaced1] 包含 keyword, 那么替換時(shí)將發(fā)生異常。

最重要的,當(dāng)標(biāo)簽值中包含 <> 符號(hào)時(shí),此方法也不能正確的提取標(biāo)簽。

總之在經(jīng)過(guò)了N多嘗試之后,通過(guò)正則都沒(méi)能有效的處理各種情況。然后換了個(gè)思路,不通過(guò)字符串的方式,通過(guò)節(jié)點(diǎn)處理。element.childNodes 可以最有效的清理標(biāo)簽內(nèi)的干擾信息。

[完美解決方案]通過(guò) DOM 節(jié)點(diǎn)處理

<div id="parent">
 keyword 1
 <span id="child">
 keyword 2
 </span>
 </div>

通過(guò) parent.childNodes 得到所有子節(jié)點(diǎn)。child 節(jié)點(diǎn)可以通過(guò) innerText.replce(keyword,result) 的方式替換得到想要的高亮效果,如下: <span id="child"><b>keyword</b> 2</span> (遞歸處理:當(dāng)child節(jié)點(diǎn)不含子節(jié)點(diǎn)時(shí)進(jìn)行replace操作)。

但是 keyword 1 是屬于文本節(jié)點(diǎn),只能修改文本內(nèi)容,無(wú)法增加 HTML,更無(wú)法單獨(dú)控制其樣式。而文本節(jié)點(diǎn)也不能轉(zhuǎn)換為普通節(jié)點(diǎn)。

更多編程相關(guān)內(nèi)容,請(qǐng)關(guān)注Gxlcms編程入門欄目!

Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號(hào)-2

違法及侵權(quán)請(qǐng)聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市萬(wàn)商天勤律師事務(wù)所王興未律師提供法律服務(wù)