我想用jquery mobile和phonegap创建字典应用程序。但我在过滤小部件中的某些单词过滤时遇到问题
例如代码,我在可过滤的listview中使用了代码示例:
<form>
<input data-type="search" id="divOfPs-input">
</form>
<div class="elements" data-filter="true" data-input="#divOfPs-input">
<p><strong>These</strong> Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam</p>
<p><strong>tags</strong> nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam</p>
<p><strong>Tags</strong> erat, sed diam voluptua. At vero eos et accusam et justo duo dolores </p>
<p><strong>are</strong> et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est</p>
<p><strong>Filterable</strong> Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur</p>
</div>
我的目的只是过滤“强”标签中的单词,而不是所有单词......怎么做?谢谢你的回答..
答案 0 :(得分:0)
您可以使用可过滤小部件的 filterCallback 选项执行此操作。基本上,覆盖默认过滤器以将搜索文本与<strong>
文本进行比较:
$(document).on("pagecreate", "#page1", function(){
$(".elements").filterable('option', 'filterCallback', StrongSearch);
});
function StrongSearch( idx, searchValue ) {
var ret = false;
if (searchValue && searchValue.length > 0){
var filttext = $(this).data("filtertext") || '';
filttext = filttext.toLowerCase();
var text = $(this).find("strong").text().toLowerCase();
if( text.indexOf(searchValue.toLowerCase()) < 0 && filttext.indexOf(searchValue.toLowerCase()) < 0){
ret = true; //filter this one out
}
}
return ret;
}
在页面创建中,将filterable设置为使用filterCallback(在我的示例中为StrongSearch)。回调传递项目的索引和输入的搜索文本。回调的this
上下文是要检查的元素(示例中的<p>
dom元素)。
行var text = $(this).find("strong").text().toLowerCase();
在强元素中查找文本,而filttext检查是否使用了data-filtertext属性。最后使用indexOf()javascript函数查看搜索值是否包含在strong text或data-filtertext属性中。
正在使用 DEMO
有关其他示例和更多详细信息,请参阅此博客条目,演示如何将默认过滤从包含搜索文本更改为以搜索文本开头(完全披露,我写了条目):
<强> http://jqmtricks.wordpress.com/2014/07/30/starts-with-instead-of-contains-filter-text/ 强>