listview在jquery mobile中搜索

时间:2011-09-19 07:24:38

标签: jquery listview jquery-mobile

    <ul id='list' data-role='listview' data-filter='true' data-inset='false'>
    <li id='a1'>
        <h3>ABC</h3>
        <p>this is ABC</p>
    </li>
    <li id='a2'>
        <h3>DEF</h3>
        <p>DEF is not ABC</p>
    </li>
</ul>

例如,

搜索'ABC',结果是ABC和DEF。

但我不想搜索<p>代码,只搜索<h3>代码。

怎么做。

4 个答案:

答案 0 :(得分:6)

嗯......这是一个开始...

$("#list li").each(function(){

    if($(this).
              find("h3").
              text().toUpperCase().
              indexOf(SEARCHWORD.toUpperCase()) >=0)
       $(this).show();
    else
       $(this).hide();

});

See a Demo

答案 1 :(得分:4)

来自jQuery mobile docs

您可以通过定义$.mobile.listview.prototype.options.filterCallback在内部绑定回调,也可以在创建窗口小部件后附加过滤器回调。 ($("#mylist").listview('option', 'filterCallback', yourFunction);

你提供的函数必须带2个参数,第一个是被搜索的任何ul的文本,第二个是被搜索的值。

在您的情况下,您只想搜索标题部分,因此您的过滤器函数应该删除标题标记之后的所有内容,然后对剩余部分应用搜索。

var searchHeader = function(text, search) {
    // Strip out extra tags from text
    return text.toLowerCase().indexOf( search ) === -1;
}
$("#list").listview('option', 'filterCallback', searchHeader);

答案 2 :(得分:4)

为自定义搜索添加以下数据属性。它是最简单的方式。

<li data-filtertext="ABC"><a href="#">Apple</a></li>
<li data-filtertext="DEF"><a href="#">United States</a></li>

答案 3 :(得分:0)

更简洁的方法就是例如。

$('#list li h3').each(function(){
    alert($(this).html().search('ABC') == 0 )
});