【问题标题】:listview search in jquery mobilejquery mobile中的listview搜索
【发布时间】:2011-11-20 00:35:36
【问题描述】:
    <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。

但我不想搜索&lt;p&gt;tag,只搜索&lt;h3&gt;tag。

怎么做。

【问题讨论】:

    标签: jquery listview jquery-mobile


    【解决方案1】:

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

    $("#list li").each(function(){
    
        if($(this).
                  find("h3").
                  text().toUpperCase().
                  indexOf(SEARCHWORD.toUpperCase()) >=0)
           $(this).show();
        else
           $(this).hide();
    
    });
    

    See a Demo

    【讨论】:

      【解决方案2】:

      来自 jQuery 手机 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);
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          更简洁的方式是例如

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-12-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多