请教一个jquery的问题

gxingmin 2010-05-11 03:29:36

$(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...
...全文
215 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gxingmin 2010-05-11
  • 打赏
  • 举报
回复
可以了,谢谢楼上大哥
阿非 2010-05-11
  • 打赏
  • 举报
回复
for (var i = 0; r.findText(te,,2); i++) {

=》

for (var i = 0; r.findText(te,0,2); i++) {
阿非 2010-05-11
  • 打赏
  • 举报
回复
注意大小写
阿非 2010-05-11
  • 打赏
  • 举报
回复
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;
}

----------------------------------------
这个稍微麻烦些

你需要在if (pos >= 0) {

之后 判断 node.data 在 pos+1 这个位置上的字符是否是空格

然后根据判断结果进行操作
gxingmin 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 sandy945 的回复:]
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);……
[/Quote]

不行啊,全不高亮显示了
阿非 2010-05-11
  • 打赏
  • 举报
回复
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);
}
}
=>

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);
}
}

gxingmin 2010-05-11
  • 打赏
  • 举报
回复
楼上能帮忙用这个正则改下上面的那段代码吗?
我不太会正则啊,谢谢
marcoak 2010-05-11
  • 打赏
  • 举报
回复

/( )?(all)(?:.| )/


用这个正则可以解决. 用$2取值.
Ray_Yang 2010-05-11
  • 打赏
  • 举报
回复
可以啊 我又打开了一次
gxingmin 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 liss_2009 的回复:]
你可以让 "空格all" 变亮吧,在单词前在加一个空格
我觉得这是一个比较有技巧的方法!帮顶!
[/Quote]
那岂不
please allow me... 中allow前三字母变亮了?
gxingmin 2010-05-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ray_yang 的回复:]
用找个
http://www.biuuu.com/p1119.html
[/Quote]

访问不了啊
liss_2009 2010-05-11
  • 打赏
  • 举报
回复
你可以让 "空格all" 变亮吧,在单词前在加一个空格
我觉得这是一个比较有技巧的方法!帮顶!
gxingmin 2010-05-11
  • 打赏
  • 举报
回复
那要是all在最开头呢

如allow

在all后加空格也不行
像is all.这个就应该高亮
hztltgg 2010-05-11
  • 打赏
  • 举报
回复
你可以让 "空格all" 变亮吧,在单词前在加一个空格
Ray_Yang 2010-05-11
  • 打赏
  • 举报
回复
lsq667 2010-05-11
  • 打赏
  • 举报
回复
这确实是个问题,因为一般都是直接匹配,像单词中包含了这个词。楼主可以考虑直接判断下这个单词前后是否有字母
gxingmin 2010-05-11
  • 打赏
  • 举报
回复
1
all ...small all ballet

2
all ...small all ballet
lsq667 2010-05-11
  • 打赏
  • 举报
回复
沙发占下再看

110,530

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧