我有一个简单的可折叠集,我希望使用单个过滤器进行过滤,该过滤器将显示在集合上方。期望的结果是仅查看与我的搜索匹配的项目(而不是项目出现的整个可折叠块)。
请告知如何处理此任务......
<div data-role="content">
<div data-role="collapsible-set">
<div data-role="collapsible" data-content-theme="c">
<h3>Firs Collapsed list</h3>
<ul data-role="listview" data-inset="false" data-theme="d">
<li><a href="index.html">Acura</a></li>
<li><a href="index.html">Audi</a></li>
<li><a href="index.html">BMW</a></li>
</ul>
</div>
<div data-role="collapsible" data-content-theme="c">
<h3>Second Collapsed list</h3>
<ul data-role="listview" data-inset="false" data-theme="d">
<li><a href="index.html">Cadillac</a></li>
<li><a href="index.html">Chrysler</a></li>
<li><a href="index.html">Dodge</a></li>
</ul>
</div>
<div data-role="collapsible" data-content-theme="c">
<h3>Third Collapsed list</h3>
<ul data-role="listview" data-inset="false" data-theme="d">
<li><a href="index.html">Ferrari</a></li>
<li><a href="index.html">Ford</a></li>
</ul>
</div>
</div><!--/content-primary -->
</div>
答案 0 :(得分:4)
您可以将data-role="collapsible"
个元素放在data-role="listview"
元素中的data-filter="true"
元素中,该元素可以具有 <ul data-role="listview" data-filter="true" id="outer-ul">
<li>
<div data-role="collapsible" data-content-theme="c">
<h3>Firs Collapsed list</h3>
<ul>
<li><a href="index.html">Acura</a></li>
<li><a href="index.html">Audi</a></li>
<li><a href="index.html">BMW</a></li>
</ul>
</div>
</li>
</ul>
属性,以自动创建过滤搜索输入。这是一个例子:
data-role="listview"
以下是演示:http://jsfiddle.net/Awg8W/2/
请注意,您需要处理一些CSS问题。其中之一是具有内部#page .ui-listview-filter:nth-child(n+2) {
display : none;
}
元素会创建多个搜索输入。我用这个CSS隐藏了第一个:
//wait for page to initialize
$(document).on('pageinit', '#page', function () {
//find the headings we want to watch
$(this).find('#outer-ul').find('.ui-collapsible-heading').on('click', function () {
//cache the parent collapsible widget
var that = $(this).closest('.ui-collapsible')[0];
//collapse all other collapsible widgets
$(this).closest('ul').find('.ui-collapsible').filter(function () {
//filter-out the collapsible widget that got clicked, so it functions
return this !== that;
}).trigger('collapse');
//since we are messing around with the listview widget, let's refresh it
$(this).closest('ul').trigger('refresh');
});
});
<强>更新强>
然后你可以用这个jQuery代码复制手风琴效果:
{{1}}
答案 1 :(得分:3)
我知道这个问题有点陈旧,但我遇到了同样的问题。我找到了一个无需编写JavaScript或CSS的解决方案。我希望这对于遇到这个问题的其他人有用。 jsfiddle
编辑: An update using nested lists
<div data-role="page" id="page">
<div data-role="content">
<h1>Collapsible set with search</h1>
<div data-role="collapsible-set" data-filter="true">
<div data-role="listview" data-inset="true" data-filter="true">
<div data-role="collapsible">
<h1>Numero uno</h1>
<div>some text</div>
</div>
<div data-role="collapsible">
<h1>Number two</h1>
<div>some text</div>
</div>
</div>
</div>
</div>
</div>
答案 2 :(得分:2)
这个问题有点陈旧,但是当我今天遇到同样的问题时,这是我的解决方法的演示:http://jsfiddle.net/2Vg4z/。
因此,关于JS,我只是复制/粘贴原始listview filter中的代码并对其进行了一些修改,以便将其应用于多个列表视图。
将从中创建搜索字段的ul
必须设置2个属性:
data-x-filter
,类似data-filter
id
,以便能够识别搜索字段必须由此搜索字段过滤的其他ul
必须设置1个属性:
data-x-filter-id
,之前设置的ID 要使用它,只需从this pastebin复制/粘贴来自jsfiddle的代码!
在演示中,我添加了一个空列表,将其放在可折叠组的顶部,但如果列表不为空,它也会过滤自己的项目。
我希望它有所帮助。
注意:此解决方案并不完美,但我只想快速完成此操作。一个更好的解决方案是创建一个“搜索字段小部件”,以避免需要空列表,但它需要更多的编码。