$(function() {
jQuery.highlight = document.body.createTextRange ? /*
Version for IE using TextRanges.
*/
function(node, te) {
var r = document.body.createTextRange();
r.moveToElementText(node);
for (var i = 0; r.findText(te); i++) {
r.pasteHTML('<b>' + r.text + '<\/b>');
r.collapse(false);
}
} :/*
(Complicated) version for Mozilla and Opera using span tags.
*/
function(node, te) {
var pos, skip, spannode, middlebit, endbit, middleclone;
skip = 0;
if (node.nodeType == 3) {
pos = node.data.toUpperCase().indexOf(te);
if (pos >= 0) {
spannode = document.createElement('span');
spannode.className = 'highlight';
middlebit = node.splitText(pos);
endbit = middlebit.splitText(te.length);
middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);
middlebit.parentNode.replaceChild(spannode, middlebit);
skip = 1;
}
}
else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
for (var i = 0; i < node.childNodes.length; ++i) {
i += $.highlight(node.childNodes[i], te);
}
}
return skip;
} ;
});jQuery.fn.removeHighlight = function() {
return this.find("span.highlight").each(function() {
this.parentNode.replaceChild(this.firstChild, this).normalize();
});
};上面这段query脚本代码是从我从网上的,其功能是将一段文字中的某个关键字高亮显示
对于中文关键字没有问题,但是对于一篇英文文章就有问题了,比方说我设定的关键字是all,它把small、ballet等单词里的all也变高亮了,我现在只想把all这个关键单词高亮显示,其他单词里虽然包含all但不高亮显示,哪位高手帮我改下上面的代码,不胜感激!
即把下面的1的效果变成2的效果
1
all...small all ballet ...2
all...small all ballet...
all ...small all ballet2
all ...small all ballet
http://www.biuuu.com/p1119.html
像is all.这个就应该高亮
please allow me... 中allow前三字母变亮了?
/( )?(all)(?:.| )/
用这个正则可以解决. 用$2取值.
var r = document.body.createTextRange();
r.moveToElementText(node);
for (var i = 0; r.findText(te); i++) {
r.pasteHTML('<b>' + r.text + '<\/b>');
r.collapse(false);
}
}
=>function(node, te) {
var r = document.body.createTextRange();
r.moveToElementText(node);
for (var i = 0; r.findText(te,,2); i++) {
r.pasteHTML('<b>' + r.text + '<\/b>');
r.collapse(false);
}
}
if (pos >= 0) {
spannode = document.createElement('span');
spannode.className = 'highlight';
middlebit = node.splitText(pos);
endbit = middlebit.splitText(te.length);
middleclone = middlebit.cloneNode(true);
spannode.appendChild(middleclone);
middlebit.parentNode.replaceChild(spannode, middlebit);
skip = 1;
}----------------------------------------
这个稍微麻烦些你需要在if (pos >= 0) {之后 判断 node.data 在 pos+1 这个位置上的字符是否是空格然后根据判断结果进行操作