假设我有一个电视指南的结构:
<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();
}
});
}
是我现在用来过滤的。然而,这正是我一直在玩的东西,可能肯定会有错误。