我在使用jQuery Live Search插件时遇到了一些问题,指定了哪些元素应该是可搜索的。我创建了几个jsFiddles来演示这个问题。
注意:jQuery Live Search 的默认用法只是过滤单词列表(demo)。但是,我想要的用法从列表项中的内容块中过滤:
<li>
<h2>Australia</h2>
<p>Lorem ipsum dolor sit amet.</p>
<li>
那么问题出在哪里呢?
将<li>
定位为可搜索元素工作正常 - 其中的所有内容都可以在实时搜索结果中搜索。
但是,尽管计数器显示正确的结果,但以<h2>
(我唯一想要搜索的部分)为目标会导致结果列表中断(所有结果都隐藏)。
如何复制?
查看这个工作小提琴,插件将<li>
作为可搜索区域。如您所见,搜索国家/地区(区分大小写)可以正常工作(<h2>
),以及搜索返回所有 4 个结果的"Lorem"(<p>
也是可搜索的)。
我想做的是只使<h2>
可搜索,而不是<li>
内的任何其他内容。这是那套小提琴。现在,在搜索一个国家/地区时,会显示正确的结果编号,但该结果的<li>
仍然隐藏不正确。正确搜索"Lorem"不会返回任何结果,结果编号为 0。
似乎当<li>
中的元素成为目标时,它会破坏<li>
本身的显示/隐藏。这是插件的错误还是我做错了什么?
非常感谢!
问题出在这个回调上:
on.results(function(results) {
$('.no-filter-results').hide();
$('.filter-results li').hide();
results.show();
});
results
参数包含对目标元素(在本例中为 h2
元素)的引用。
您将所有li
元素设置为首先隐藏在此行中:
$('.filter-results li').hide();
然后仅设置h2
元素以使用此行可见:
results.show();
显然这是行不通的,因为父li
仍然隐藏。
解决方案是在结果中显示h2
的父li
,如下所示:
results.parent('li').show();
这就解释了为什么当您之前定位li
元素时它起作用。