【发布时间】:2018-02-17 23:40:48
【问题描述】:
有没有办法使用 mark.js 隐藏()不匹配的搜索元素?阅读文档后,我最初认为我可以使用“noMatch”选项编写自定义函数来隐藏不匹配文本的父 div,但它没有按预期工作。
例如,如果我使用 mark.js 在以下内容中搜索并突出显示“Lorem”:
<div class="panel-body context">
<h2>Lorem</h2>
<div>
<p>ipsum</p>
<p>lorem</p>
</div>
<h2>ipsum</h2>
<div>
<p>ipsum</p>
<p>lorem</p>
</div>
</div>
我怎样才能让它只返回匹配的元素呢?
<div class="panel-body context">
<h2><span="highlight">Lorem</span><h2>
<div>
<p><span="highlight">lorem</span></p>
</div>
<div>
<p><span="highlight">lorem</span></p>
</div>
</div>
这是我当前的代码块:
$(function() {
var mark = function() {
// Read the keyword
var keyword = $("input[name='search-keyword']").val();
// Determine selected options
var options = {
"element": "span",
"className": "highlight",
"separateWordSearch": false,
"noMatch": function(term) {
term.hide(); // WHERE I HOPED I COULD ADD HIDE LOGIC
}
}
// Remove previous marked elements and mark
// the new keyword inside the context
$(".panel-body context").unmark({
done: function() {
$(".panel-body context").mark(keyword, options);
}
});
};
$("input[name='search-keyword']").on("input", mark);
});
编辑这是我从 mark.js 示例中更改的jsfiddle,这是我正在尝试做的更好的示例。感谢您提前提供任何帮助!
【问题讨论】:
-
你可以使用
:not伪选择器.panel-body h2:not(.highlight), .panel-body p:not(.highlight) { display: none; } -
@Rob M。感谢您抽出宝贵的时间,但我不明白可以使用 mark.js 库将该逻辑放在哪里。你认为它会追随
done: function()还是?
标签: javascript jquery search highlight