针对用户输入效率进行过滤.还有Stuff

Filtering Against User Input Efficiency.. And Stuff

本文关键字:过滤 还有 Stuff 效率 用户 输入      更新时间:2023-09-26

假设我有一个电视指南的结构:

<div class="day">
    <p>A Date</p>
    <div class="time">
        <p>A Time</p>
        <div class="show">
            <p>A Show</p>
            <div class="info1">
                <p>Info 1</p>
            </div>
            <div class="info2">
                <p>Info 2</p>
            </div>
            <div class="info3">
                <p>Info 3</p>
            </div>
            <div class="info4">
                <p>Info 4</p>
            </div>
        </div>
    </div>
</div>

我正在阅读的XML总共有2135次,750次,146天。搜索节目名称的最佳方法是什么?我希望隐藏所有与输入字符串不匹配的节目;如果一个div.time不包含可见的显示(即,该特定div.time下没有与输入字符串匹配的div.show),则该容器也应被隐藏;如果一个div.day不包含输入搜索的结果,则该父级也将被隐藏。

首先让我说,我知道如何通过JS/jQuery提供此功能。然而,我可能不知道最好的方法。我一直在摆弄,当我开始隐藏不包含匹配(可见)显示容器的时间容器时,浏览器中的事情开始变得缓慢/滞后。

我还想指出的是,这种特殊的结构并不局限于我上面所写的内容。如果有更好/更有效的方法来构建指南,请尽一切努力通知我。

一个更普遍的问题是:什么时候开始让服务器处理一些过滤是个好主意?如果客户端上有2000多个节点无法处理,我是否应该通过某种输入询问用户希望查看的天数范围,然后只将这些节点返回给客户端?

编辑:

search: function(selector, string) {
    string = $.trim(string);
    $(selector).each(function() {
        if ( $(this).children("p").text().search(new RegExp(string, "i")) < 0 ) {
            $(this).hide();
        }
        else {
            $(this).show();
        }
    });
    ctv.hideempty(".time");
},
hideempty: function(selector) {
    $(selector).each(function () {
        if ( $(this).children("div").is(":hidden") ) {
            $(this).hide();
        }
        else {
            $(this).show();
        }
    });
}

是我现在用来过滤的。然而,这正是我一直在玩的东西,可能肯定会有漏洞。

2000+项可能是相当多的记录,需要保存在客户端的内存中,但如果这些信息字段始终很小,则可能是可以管理的。但这可能是次要问题,而且你已经认识到了这个问题的解决方案。

您现在可能面临的更大问题是,听起来您正在DOM中创建2135个show DIV,以及它们的所有子级,然后尝试动态显示和隐藏它们。这绝对会挑战浏览器,让事情变得缓慢和滞后。

尝试只创建少量的show DIV,然后根据搜索和筛选结果替换这些DIV的内容。为此,您可以使用类似ejs的模板系统,也可以自己动手。对于大型结果集,只需显示前N个节目,并在用户做某事时加载其他节目(即滚动列表或点击"显示更多结果"按钮)。