【问题标题】:jQuery Search and Hightlight, 2 Colors - 2 ListsjQuery 搜索和突出显示,2 种颜色 - 2 个列表
【发布时间】:2017-12-09 21:08:31
【问题描述】:

我有一些旧代码用于突出显示单词列表:

jQuery.fn.highlight = function(pat) {
 function innerHighlight(node, pat) {
  var skip = 0;
  if (node.nodeType == 3) {
   var pos = node.data.toUpperCase().indexOf(pat);
   if (pos >= 0) {
    var spannode = document.createElement('span');
    spannode.className = 'highlight';
    var middlebit = node.splitText(pos);
    var endbit = middlebit.splitText(pat.length);
    var 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 += innerHighlight(node.childNodes[i], pat);
   }
  }
  return skip;
 }
 return this.length && pat && pat.length ? this.each(function() {
  innerHighlight(this, pat.toUpperCase());
 }) : this;
};

$(document).ready(function(){   
 $("td").highlight("car")
 $("td").highlight("sales");
 $("td").highlight("income");
});

</script>;

和这个帖子很像:Search and Highlight in jQuery

但现在我需要相同的脚本来突出显示同一页面上具有不同颜色的第二个列表。我的要求与这篇文章非常相似:Using multiple colors for highlighting

好像听不懂。

【问题讨论】:

    标签: jquery search highlight


    【解决方案1】:

    (根据 OP 的反馈更新答案...)

    对您来说最快的解决方案是修改现有函数,使其接受第二个参数,指定要添加到突出显示范围的 CSS 类名。

    (或者更具体地说,在我下面的示例中,不是整个 CSS 类名,而只是颜色部分。这会自动附加到词干“highlight-”,以节省您每次调用函数时都必须输入整个内容.)

    所以...

    // 1. Change: jQuery.fn.highlight = function(pat) {
    // to...
    jQuery.fn.highlight = function(pat, color) {
    
    // 2. Change: spannode.className = 'highlight';
    // to...
    spannode.className = 'highlight-'+color;
    

    您的函数现在接受名为“color”的第二个参数,spannode.className 根据指定的颜色是动态的。

    // 3. Add some classes like these to your CSS...
    //
    .highlight-red {background-color:red;}
    .highlight-green {background-color:green;}
    .highlight-pink {color:white;font-weight:bold; background-color:pink;}
    
    // 4. Then call your function like this...
    //
    $("td").highlight("car", 'red')
    $("td").highlight("sales", 'green');
    $("td").highlight("income", 'pink');
    

    演示:在JSFiddle...中运行

    【讨论】:

    • 它没有用。甚至没有突出显示,但想法是正确的。
    • 您是否在“示例”下运行了代码 sn-p?这个对我有用。如果它仍然不适合您,请告诉我您使用的是什么浏览器。
    • 嗨,颠簸,你的密码词完美。 sn-p 被隐藏了,所以我没看到。该站点已经在运行一个较低的 jquery 库......该代码在没有 jQuery 2.0.0 参考的情况下仍然有效。我应该参考吗?再次感谢。
    • 很抱歉不能接受您的回答。正在搜索的关键字之一是“a$$”,当它遇到 cla$$="example" 时,它会在页面上大打折扣。现在回到旧代码。
    • 没问题。我的错,对此感到抱歉。但是我已经编辑了答案,所以它现在应该可以正常工作,并且对现有的 ciode 需要进行最少的更改。快乐编码! :-)
    猜你喜欢
    • 2017-12-11
    • 2015-12-09
    • 2018-06-01
    • 2013-11-12
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多