【问题标题】:Active Search Bar In JQueryJQuery 中的主动搜索栏
【发布时间】:2015-06-13 15:51:51
【问题描述】:

我正在尝试为项目列表创建搜索选项。这样,用户可以在列表中搜索特定项目。但是,我有几个问题。我的列表同时使用跨度和图像。我创建的 jquery 按跨度对列表进行排序就可以了,但是,当我尝试使用活动搜索时,它什么也没做。这是我的示例代码:

<input type="text" name="searchList" id="searchInput" placeholder="Type Here To Search" />
<ul id="lessonList" class="lessonlist">
<li><span class="name">Lesson 1</span>
    <img src="images/lessonFiller1.png" width="45%" height="45%"/>
</li>
<li><span class="name">Lesson 2</span>
    <img src="images/lessonFiller2.png" width="45%" height="45%"/></li>
<li><span class="name">Lesson3</span>
    <img src="images/lessonFiller3.png" width="45%" height="45%" /></li>
<li><span class="name">Lesson 4</span>
    <img src="images/lessonFiller4.png" width="45%" height="45%"/></li>
<li><span class="name">Lesson 5</span>
    <img src="images/lessonFiller5.png" width="45%" height="45%"/></li>
</ul>

我的排序 jQuery 再次正常工作:

$(document).ready(function(e) {
var desc = $(this).hasClass("asc"),
    list = $("#lessonList");
list.append(list.children().get().sort(function(a, b) {
    var aProp = $(a).find("span.name").text(),
        bProp = $(b).find("span.name").text();
    return (aProp > bProp ? 1 : aProp < bProp ? -1 : 0) * (desc ? -1 : 1);
}));
$(this).toggleClass("desc", desc)
       .toggleClass("asc", !desc)
       .siblings().removeClass("asc desc");
e.preventDefault();});

但是,当我尝试使用输入来创建主动搜索时,什么也没有发生。这是它的代码:

$('#searchInput').keyup(function(){

//var that = this, $allListElements = $('ul > li');
var valThis = $(this).val();
var list = $('ul li span');

list.each(function(){
 var text = $(this).text().toLowerCase();
    (text.indexOf(valThis) == 0) ? $(this).show() : $(this).hide();});});

我做错了什么?这甚至是我能做的吗?提前致谢。

【问题讨论】:

    标签: javascript jquery html list search


    【解决方案1】:

    有多个问题,

    1. 你在哪里包含你的脚本?在头部或主体的最后?如果在创建 html dom 元素之前加载脚本,则将您的 keyup 绑定放在准备好的函数中。
    2. 隐藏不跨度。使用 parent() 显示/隐藏。

    下面的代码应该可以工作,链接是https://jsfiddle.net/4pbp5dhr/

    $(document).ready(function(e) {
     var desc = $(this).hasClass("asc"),
    list = $("#lessonList");
    list.append(list.children().get().sort(function(a, b) {
    var aProp = $(a).find("span.name").text(),
        bProp = $(b).find("span.name").text();
        return (aProp > bProp ? 1 : aProp < bProp ? -1 : 0) * (desc ? -1 : 1);
    }));
    $(this).toggleClass("desc", desc)
       .toggleClass("asc", !desc)
       .siblings().removeClass("asc desc");
     //e.preventDefault();
    
    //Move the search input inside ready
    $('#searchInput').keyup(function(){
    
    //var that = this, $allListElements = $('ul > li');
    var valThis = $(this).val();
    console.log(valThis);
    var list = $('ul li span');
    
    list.each(function(){
       var text = $(this).text().toLowerCase();
       (text.indexOf(valThis) == 0) ? $(this).parent().show() :      $(this).parent().hide();});
    });
    
    });
    

    我已经评论了 preventDefault()。

    【讨论】:

    • 效果很好,谢谢!不过,我还有一个问题。我怎样才能使它搜索跨度的主体?例如,如果我输入“1”,我只能输入“课程”,否则整个列表就会消失。
    • 没关系,我能够找到解决方案。我所要做的就是将 == 0 更改为 >= 0 就可以了。
    • 我想更好的方法是 > -1。这应该更快。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多