var ele= document.getElementById('text');
var children = ele.childNodes;
for(var i=0; i< children.length; i++)
{
if(children[i].nodeType == 3)
{
//如果存在关键字,则把该节点改成元素节点,给关键字加上超链接
}
}
var children = ele.childNodes;
for(var i=0; i< children.length; i++)
{
if(children[i].nodeType == 3)
{
//如果存在关键字,则把该节点改成元素节点,给关键字加上超链接
}
}
<html>
<head>
<title>tt</title>
<script type='text/javascript' src='/js/xmlhttp.js'></script>
<script>
function showSearchResult(){
var text = document.getElementById('text').innerHTML;
text = text.replace(/(?:索尼爱立信|C510c|320)/ig,function(a,b,c){
return '<a href="#" >'+a+'</a>';
});
document.getElementById('text').innerHTML = text;
}</script>
</head><body onload="showSearchResult()"><div class="text" id="text" style="font-size:14px;">
<!-- 索尼爱立信 -->
<pre>107×47×12.
5mm的C510c,</pre>
索尼爱立信C510c 可选颜色:黑色、银色<BR><BR> 参考报价:行货/暂缺;改版机/ 1500元
在不久前,索尼爱立信推出了C905c最新版本的升级固件,通过升级固件后,C905能为用户提供人脸识别与微笑拍摄功能。而索尼爱立信最新推出的Cyber-shot手机——C510c,该机虽然是一款针对中低端消费市场的机型,但其却与升级固件后的C905c一样,同样具备人脸识别与微笑快门功能的支持,是目前索尼爱立信旗下功能最为强大的一款320万像素拍照手机。
<IMG src="http://img001.photo.21cn.com/photos/album/20090313/o/320.jpg" border=0 type="0">
作为索尼爱立信Cyber-shot系列中的一员,C510c沿用了经典的直板外观造型,并在细节处理上融入了一些新的元素,让人感觉充满活力。机身尺寸为配备有2.2英寸的QVGA分辨率屏幕,并搭载有320万像素摄像头,算上电池的机身重量仅为92g。由于采用滑盖式镜头盖设计的缘故,C510c的摄像头能够得到很好的保护,而且启动拍照功能也很方便,只需打开滑盖式镜头盖便可。C510c不仅支持自动对焦、人脸识别与微笑拍摄功能,同时其还设置有双LED补光灯,并具备数码防抖、防红眼闪光、场景模式、BestPic模式以及地理位置信息标注功能。</P>
<IMG src="http://img001.photo.21cn.com/photos/album/20090313/o/C510c.jpg" border=0 type="0">
</div>
</body>
</html>
被HTML标签包含的内容如果是那三个关键字的话 不去替换它
反过来说,就是替换该元素节点下所有子文本节点里面的关键字f(children[i].nodeType == 3) 判断是否文本节点
如果是文本节点,且里面存在关键字,那么就创建一个元素节点,替换此文本节点(文本节点里面不能包括元素a,也就是超链接,所以必须用元素节点替换,并对关键字进行处理
var e = createDocumentFragment();
把文本节点拆分后的节点全部保存在此元素下: e.appendChild();
a.append(document.createElement("a"));
a.append(document.createTextNode());然后替换文本节点 replaceChild
<div class="text" id="text" style="font-size:14px;">
<!-- 索尼爱立信 -->
<pre>107×47×12.
5mm的C510c,</pre>
索尼爱立信C510c 可选颜色:黑色、银色<BR><BR> 参考报价:行货/暂缺;改版机/ 1500元
<P style="TEXT-INDENT: 2em"> 在不久前,索尼爱立信推出了C905c最新版本的升级固件,通过升级固件后,C905能为用户提供人脸识别与微笑拍摄功能。而索尼爱立信最新推出的Cyber-shot手机——C510c,该机虽然是一款针对中低端消费市场的机型,但其却与升级固件后的C905c一样,同样具备人脸识别与微笑快门功能的支持,是目前索尼爱立信旗下功能最为强大的一款320万像素拍照手机。
<IMG src="http://img001.photo.21cn.com/photos/album/20090313/o/320.jpg" border=0 type="0">
作为索尼爱立信Cyber-shot系列中的一员,C510c沿用了经典的直板外观造型,并在细节处理上融入了一些新的元素,让人感觉充满活力。机身尺寸为配备有2.2英寸的QVGA分辨率屏幕,并搭载有320万像素摄像头,算上电池的机身重量仅为92g。由于采用滑盖式镜头盖设计的缘故,C510c的摄像头能够得到很好的保护,而且启动拍照功能也很方便,只需打开滑盖式镜头盖便可。C510c不仅支持自动对焦、人脸识别与微笑拍摄功能,同时其还设置有双LED补光灯,并具备数码防抖、防红眼闪光、场景模式、BestPic模式以及地理位置信息标注功能。</P>
<IMG src="http://img001.photo.21cn.com/photos/album/20090313/o/C510c.jpg" border=0 type="0">
</div><SCRIPT LANGUAGE="JavaScript">
var keywords = [["索尼爱立信","font-weight: bold;text-decoration: none;color: #0e3987;","http://data.nba.tom.com/teampop.php?id=1610612747","http://nba.tom.com/teams/lakers/index.html"],
["C510c","font-weight: bold;text-decoration: none;color: #0e3987;","http://data.nba.tom.com/teampop.php?id=1610612747","http://nba.tom.com/teams/lakers/index.html"],
["320","font-weight: bold;text-decoration: none;color: #0e3987;","http://data.nba.tom.com/teampop.php?id=1610612745","http://nba.tom.com/teams/rockets/index.html"]];//v1.9.3 gbk
var bIE = (navigator.appName.indexOf("Microsoft") != -1);
var documentObj = document.compatMode=="CSS1Compat"?document.documentElement:document.body;
var tID = null;
function filterNode(Node) {
if (Node.tagName=="IMG" || Node.tagName=="A" || Node.tagName=="SCRIPT" || Node.tagName== "OBJECT")
return false;
var pNode = Node.parentNode;
while (pNode.tagName != "BODY") {
if (pNode.tagName=="IMG" || pNode.tagName=="A" || pNode.tagName=="SCRIPT" || pNode.tagName=="OBJECT")
return false;
pNode = pNode.parentNode;
}
return true;
};function replaceKeyword(id, keyword, css) {
var isF = 0;
if (bIE) {
var textRange = document.body.createTextRange();
while (textRange.findText(keyword)) {
if(isF>1){
break;
}
var parentNode = textRange.parentElement();
if (filterNode(parentNode)) {
var kwAnchor = '<a href="'+ keywords[id][3] +'" target="_blank" style="'+ css +'" onmouseover="window.clearTimeout(tID);showHwMiniDiv('+ id +', event, this);" onmouseout="tID=window.setTimeout(\'hideHwMiniDiv()\',1500);">'+ keyword +'</a>';
textRange.pasteHTML(kwAnchor);
//break;
isF++;
}
textRange.collapse(false);
}
} else {
Accept_Node = function (node) {
if (node.tagName == "IMG" || node.tagName == "A" || node.tagName == "FORM" || node.tagName == "OBJECT" || node.tagName == "SCRIPT") {
return NodeFilter.FILTER_REJECT;
} else {
return NodeFilter.FILTER_ACCEPT;
}
};
var TreeWalker = document.createTreeWalker(document.body, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT, Accept_Node, false);
var vNodes = new Array();
var range = document.createRange();
while (cNode = TreeWalker.nextNode()) {
if (cNode.nodeValue != null) {
vNodes[vNodes.length] = cNode;
}
}
for (var i=0; i < vNodes.length; i++) {
if(isF>1){
break;
}
var key = vNodes[i].nodeValue;
var pos = key.indexOf(keyword);
if (pos != -1) {
range.selectNode(vNodes[i]);
range.setStart(vNodes[i], pos);
range.setEnd(vNodes[i], range.startOffset + keyword.length);
range.deleteContents();
var nNode = document.createElement("span");
ArchorTag = '<a href="'+ keywords[id][3] +'" target="_blank" style="'+ css +'" onmouseover="window.clearTimeout(tID);showHwMiniDiv('+ id +', event, this);" onmouseout="tID=window.setTimeout(\'hideHwMiniDiv()\',1500);">'+ keyword +'</a>';
nNode.innerHTML = ArchorTag;
range.insertNode(nNode);
//break;
isF++;
}
}
}
};function getElementPos(el) {
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
if(el.parentNode === null || el.style.display == 'none'){
return false;
}
var parent = null;
var pos = [];
var box;
if(el.getBoundingClientRect){
box = el.getBoundingClientRect();
var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
return {x:box.left + scrollLeft, y:box.top + scrollTop};
}
else if(document.getBoxObjectFor){
box = document.getBoxObjectFor(el);
var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
pos = [box.x - borderLeft, box.y - borderTop];
}
else{
pos = [el.offsetLeft, el.offsetTop];
parent = el.offsetParent;
if (parent != el) {
while (parent) {
pos[0] += parent.offsetLeft;
pos[1] += parent.offsetTop;
parent = parent.offsetParent;
}
}
if (ua.indexOf('opera') != -1|| ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )){
pos[0] -= document.body.offsetLeft;
pos[1] -= document.body.offsetTop;
}
}
if (el.parentNode) {
parent = el.parentNode;
}else {
parent = null;
}
while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML'){
pos[0] -= parent.scrollLeft;
pos[1] -= parent.scrollTop;
if (parent.parentNode) {
parent = parent.parentNode;
}else { parent = null; }
}
return {x:pos[0], y:pos[1]};
};
function showHwMiniDiv(id, e, kwObj){
var keyword = kwObj.innerHTML;
var pos = getElementPos(kwObj);
var anchorX = pos.x;
var anchorY = pos.y;
var miniDiv = document.getElementById("hw_mini_div");
if(parseInt(e.clientY) > miniDiv.offsetHeight+30) {
miniDiv.style.top = (anchorY-miniDiv.offsetHeight)+"px";
}
else {
miniDiv.style.top = (anchorY+20)+"px";
}
if((parseInt(documentObj.clientWidth)-parseInt(e.clientX)) > miniDiv.offsetWidth+30) {
miniDiv.style.left = (anchorX+30)+"px";
}
else {
miniDiv.style.left = (anchorX-miniDiv.offsetWidth-10)+"px";
if(parseInt(miniDiv.style.left) < 0) {
miniDiv.style.left = (anchorX+30)+"px";
}
} miniDiv.style.visibility = "visible";
miniDiv.style.display = ''; miniDiv.innerHTML = '<iframe marginwidth=0 marginheight=0 scrolling=no frameborder=0 width="508" height="220" allowtransparency="true" src="http://adserve.tom.com/hw/hw_mini.html?hw_keyword='+ keywords[id][0] +'&hw_url='+ encodeURIComponent(keywords[id][2]) +'"></iframe>';};function hideHwMiniDiv(){
var miniDiv = document.getElementById("hw_mini_div");
miniDiv.innerHTML = "";
miniDiv.style.visibility = "hidden";
};function hwInit(){
document.write('<div id="hw_mini_div" style="position:absolute; visibility:hidden; top:0px; left:0px; width:508px; height:220px;" onmouseover="window.clearTimeout(tID);" onmouseout="window.setTimeout(\'hideHwMiniDiv()\',1500);" ></div>');
var keyword;
for(var i=0; keyword=keywords[i]; i++){
replaceKeyword(i, keyword[0], keyword[1]);
}
};
hwInit();
</SCRIPT></body>
</html>