国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

基于jquery的給文章加入關(guān)鍵字鏈接

2019-11-21 00:10:41
字體:
供稿:網(wǎng)友
開始技術(shù)部門打算在后臺(tái)添加或者修改文章的時(shí)候,把文章里面的關(guān)鍵字替換為<a>標(biāo)簽。但是這樣就出現(xiàn)一些問題
如果新添加一個(gè)關(guān)鍵字,是不是所有的文章又要重新過濾一邊。把新關(guān)鍵字替換掉。
如果修改了關(guān)鍵字的名字或者是修改了關(guān)鍵字的鏈接地址,那么又要重新過濾所有文件。
綜合了一些情況后,感覺使用后臺(tái)解決的方案行不通。于是我想到了前臺(tái)腳本解決
思路:
關(guān)鍵字鏈接的信息任然存放在數(shù)據(jù)庫中,在數(shù)據(jù)庫中有一些字段來保存關(guān)鍵字的信息。
當(dāng)用戶添加,刪除,更新關(guān)鍵字的時(shí)候,在后臺(tái)生成一個(gè)js文件,格式如下:
復(fù)制代碼 代碼如下:

var wordlinkdata='[{"WordLinkAlias":"wordlinkReplace4","WordLinkUrl":"http://m.survivalescaperooms.com","WordLinkName":"你大爺21"},{"WordLinkAlias":"wordlinkReplace7","WordLinkUrl":"http://sc.VeVB.COm","WordLinkName":"電腦"}]'

wordlinkdata變量存放一些json數(shù)據(jù),這些數(shù)據(jù)是第二步的操作生成的。"WordLinkAlias"指的是關(guān)鍵詞的名稱,"WordLinkUrl"是關(guān)鍵字的鏈接。
在前臺(tái)頁面引用我們生成的js文件,我工作中使用的是jquery庫。我們需要做工作是替換文章中所有的關(guān)鍵字 。這樣,我們就需要用wordlinkdata的數(shù)據(jù)不斷的循環(huán)判斷。
復(fù)制代碼 代碼如下:

$(document).ready(function() {
AddWordLink();
});
function AddWordLink(){
//給特殊詞加上鏈接
if (wordlinkdata != undefined && wordlinkdata != null) {
var content = $(".divArtContent");
if (content != null) {
var myobject = eval('(' + wordlinkdata + ')');
for (var i = 0; i < myobject.length; i++) {
content.highLight(myobject[i].WordLinkName, myobject[i].WordLinkUrl);
}
}
}
}
(function($) {
$.fn.highLight = function(str, url) {
if (str == undefined || str == " ") {
return this.find("a.divArtContentAlink").each(function() {
this.parentNode.firstChild.nodeName;
with (this.parentNode) {
replaceChild(this.firstChild, this);
normalize();
}
}).end();
} else {
$(this).each(function() {
elt = $(this).get(0);
elt.normalize();
$.each($.makeArray(elt.childNodes), function(i, node) {
if (node.nodeType == 3) {
var searchnode = node;
var pos = searchnode.data.indexOf(str);
if (pos >= 0) {//查找
var spannode = document.createElement('a');
spannode.className = 'divArtContentAlink';
spannode.href = url;
spannode.target = 'blank';
var middlebit = searchnode.splitText(pos);
var searchnode = middlebit.splitText(str.length);
var middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);
if (searchnode.parentNode != undefined)
searchnode.parentNode.replaceChild(spannode, middlebit);
}
} else {
$(node).highLight(str, url);
}
})
})
}
return $(this);
}
})(jQuery);

$.fn.highLight擴(kuò)展是一個(gè)高亮擴(kuò)展,我修改了一下,用來滿足需求,如果你需要修改鏈接的樣式,或者想自己創(chuàng)建別的元素,你可以修改以下的代碼
復(fù)制代碼 代碼如下:

var spannode = document.createElement('a');
spannode.className = 'divArtContentAlink';
spannode.href = url;
spannode.target = 'blank';

不過這個(gè)方法的缺陷是,當(dāng)關(guān)鍵字過多的時(shí)候(超過150個(gè)),頁面的速度會(huì)下降
總結(jié):這種方式的優(yōu)勢(shì)是,不需要對(duì)以前的文章做任何的修改,添加,刪除,修改很靈活
缺點(diǎn)是:一旦關(guān)鍵字太多,速度會(huì)下降。
大家如果遇到過這種情況,可以探討下。期待更好的解決方案
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 郑州市| 福安市| 青神县| 佛冈县| 自治县| 房产| 邛崃市| 宁南县| 牙克石市| 广汉市| 浠水县| 盱眙县| 乌鲁木齐县| 大埔区| 凤台县| 米泉市| 右玉县| 忻州市| 丰顺县| 永川市| 潮州市| 长葛市| 江达县| 娄烦县| 鹤山市| 武隆县| 舞钢市| 紫云| 航空| 凤城市| 青州市| 榆林市| 钟祥市| 岳普湖县| 浪卡子县| 化德县| 思茅市| 宁阳县| 乐亭县| 巴青县| 太仓市|