$(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...

解决方案 »

  1.   

    1
    all ...small all ballet2
    all ...small all ballet
      

  2.   

    用找个
    http://www.biuuu.com/p1119.html
      

  3.   

    你可以让 "空格all" 变亮吧,在单词前在加一个空格
      

  4.   

    那要是all在最开头呢如allow 在all后加空格也不行
    像is all.这个就应该高亮
      

  5.   

    那岂不
    please allow me... 中allow前三字母变亮了?
      

  6.   


    /( )?(all)(?:.| )/
    用这个正则可以解决. 用$2取值.
      

  7.   

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

  8.   

    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 这个位置上的字符是否是空格然后根据判断结果进行操作
      

  9.   

    for (var i = 0; r.findText(te,,2); i++) {=》for (var i = 0; r.findText(te,0,2); i++) {