首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用mark.js突出显示不同的搜索结果?

如何用mark.js突出显示不同的搜索结果?
EN

Stack Overflow用户
提问于 2017-04-28 12:17:27
回答 2查看 5K关注 0票数 3

我的目标

我在HTML页面中有一个文本,我希望能够使用两个不同的搜索框,使用mark.js。第一个搜索框应突出显示颜色中的匹配词,而第二个搜索框应突出显示不同颜色的匹配结果。

我试过的

我有以下代码:

CSS:

代码语言:javascript
复制
mark {
  padding: 0;
  background-color:yellow;
}

jQuery:

代码语言:javascript
复制
$(function() {
  var mark = function() {
    // Read the keyword
    var keyword = $("input[name='keyword']").val();
    // Remove previous marked elements and mark
    // the new keyword inside the context
    $(".context").unmark({
      done: function() {
        $(".context").mark(keyword);
      }
    });
  };
  $("input[name='keyword']").on("input", mark);
});

HTML:

代码语言:javascript
复制
<input type="text" name="keyword">
<div class="context">
The fox went over the fence
</div>

工作JSFiddle:JSFiddle

我的问题是,我不知道如何在不重复JavaScript代码的情况下添加第二个搜索框;当我这样做时,第二个搜索框中的搜索将删除第一个搜索框中的突出显示。

我发现以下线程似乎解决了我的问题(我不得不删除这个链接,因为我没有足够的代表发布两个以上的链接),但是当我试图访问JSFiddles时,我得到了一个404错误。

如何添加第二个搜索框,允许我在一个颜色中有第一个搜索框的结果,在另一个颜色中有第二个搜索框的结果,而不让一个搜索擦除另一个搜索框?

编辑

从我得到的答案来看,我相信我没有问cleary我的问题。这是一个“半工作”JSFiddle,在这里你可以看到我需要的两个搜索框。如果我在第一个搜索框中搜索‘狐狸’,然后在第二个搜索框中搜索'fence‘;'fox’不再突出显示,但'fence‘是。我想两人都保持高亮,有不同的颜色。我真的不知道该怎么做。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-02 11:29:37

我以前的答案是两个框和一个输入,但这个答案是一个框和两个输入,如您所需。如果有人需要这个解决方案,我不会删除之前的答案

这个新的解决方案需要一个类名,我称之为.secondary。见守则:

https://jsfiddle.net/1at87fnu/55/

代码语言:javascript
复制
$(function() {
  var mark = function() {
    // Read the keyword
    var keyword = $("input[name='keyword']").val();
    var keyword2 = $("input[name='keyword2']").val();
    // Remove previous marked elements and mark
    // the new keyword inside the context
    $(".context").unmark({
      done: function() {
        $(".context").mark(keyword).mark(keyword2, {className: 'secondary'});
      }
    });
  };
  $("input[name^='keyword']").on("input", mark);
});

和CSS

代码语言:javascript
复制
mark {
  padding: 0;
  background-color:yellow;
}
mark.secondary {
  padding: 0;
  background-color: orange;
}

您可以在我对mark()函数调用两次的javascript上看到,在第二个调用中,我添加了一个className。您可以在这里看到mark.js的更多选项:

https://markjs.io/#mark

这是一个截图,最后的结果是:

票数 8
EN

Stack Overflow用户

发布于 2017-04-28 12:29:33

只需将其添加到您的选择器:

https://jsfiddle.net/1at87fnu/49/

代码语言:javascript
复制
  $(function() {
    var mark = function() {
      // Read the keyword
      var keyword = $("input[name='keyword']").val();
      // Remove previous marked elements and mark
      // the new keyword inside the context
      $(".context, .context2").unmark({
        done: function() {
          $(".context, .context2").mark(keyword);
        }
      });
    };
    $("input[name='keyword']").on("input", mark);
  });

html

代码语言:javascript
复制
<input type="text" name="keyword">
<div class="context">
    The fox went over the fence
</div>
<div class="context2">
    The fox went over the fence
</div>

由于有了jQuery递归选择器,您可以用逗号分隔来添加所需的所有选择器:

代码语言:javascript
复制
$('.one, #two, three[disabled]')

诸若此类。

更新

使用CSS,您可以在方框之间应用不同的颜色。只需针对您正在使用的框,如下面的CSS:

https://jsfiddle.net/1at87fnu/50/

代码语言:javascript
复制
mark {
  padding: 0;
  background-color:yellow;
}
.context2 mark {
  padding: 0;
  background-color: orange;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43680080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档