在 jQuery 中过滤 div 并根据自定义数据属性标签隐藏它们

2024-01-11

我花了几个小时为在线商家网站构建一个简单的可排序搜索结果。它的工作方式是从搜索页面获取 html 模板,同时使用 ajax 执行搜索。检索 json 数据,然后创建 div 元素。我已经完成了sort,per, and direction排序,但现在我被困在filter排序,我真的不知道从哪里开始最后一个。

最后一个排序函数需要迭代每个 div,检查所选属性是否为 1 或 0。如果属性为 0,则hide需要为 div 切换类。

我的问题是:

  • 如何访问当前选定的diveach()
  • 如何检查datatarget是否等于0。 如果为 0,则隐藏它,或者
  • 如何继续下一次迭代each()如果不是。

我想要实现的目标的简短伪代码:

$('div.item').each(function(){
 datartarget = (datatarget == 0) ? currentdiv.hide() : datatarget;
});

这是我的完整jQuery code:

$(function(){
    var last_selector = null;
    last_selector = $('.filter , .sort, .per, .direction').click(function(){
        var clname = this.className;
        var direction = $('#direction > dd.active > a').attr('data-target');
        $('.sub-nav.'+clname+'').find('dd.active').removeClass('active');
        $(this).parent().addClass('active');
        var datatarget = $(this).attr('data-target');
        if(clname == 'sort')
        {
            $('div.item').tsort({order:direction,attr: datatarget+'-data'});
            last_selector = datatarget;
        }
        if(clname == 'filter')
        {
            last_selector = (last_selector == null) ? last_selector : $('#sort dd.active > a').attr('data-target');
            $('div.item').each(function(){

                //have no idea where to start )-:
            })
        }
        if(clname == 'per')
        {
            last_selector = (last_selector == null) ? last_selector : $('#sort dd.active > a').attr('data-target');
            var item_count = $('div.item').length; 
            if(item_count > datatarget)
            {
                while (item_count > datatarget) {
                    $('div.item:last-child').toggleClass('hide');
                    item_count = $('div.item').length;
                }
            }
            if(item_count < datatarget)
            {
                $('div.item.hide').toggleClass('hide');
                while (item_count > datatarget) {
                    $('div.item:last-child').toggleClass('hide');
                    item_count = $('div.item').length;
                }
            }
        }
        if(clname == 'direction')
        {
            direction = $(this).attr('data-target');
            datatarget = (last_selector == null) ? last_selector : 'price';
            $('div.item').tsort({order:direction,attr: datatarget+'-data'});
        }
        return last_selector;
    });
});

和html

下拉选择 div(提供datatarget对于点击功能):

<a data-dropdown="direction" class="button dropdown">Direction Order</a>
<dl id="direction" data-dropdown-content class="sub-nav direction f-dropdown content">
  <dt><strong>Direction:</strong></dt>
  <dd class="active"><a class="direction" data-target="desc">Down</a></dd>
  <dd><a class="direction" data-target="asc">Up</a></dd>
</dl> 

<a data-dropdown="filter-by" class="button dropdown">Filter Results</a>
<dl id="filter-by" data-dropdown-content class="sub-nav filter f-dropdown content">
  <dt><strong>Filter Results:</strong></dt>
  <dd class="active"><a class="filter" data-target="new">Newest</a></dd>
  <dd><a class="filter" data-target="endsoon">Ending Soon</a></dd>
  <dd><a class="filter" data-target="reserve">No Reserve</a></dd>
  <dd><a class="filter" data-target="buyitnow">Buy It Now</a></dd>
  <dd><a class="filter" data-target="all">All</a></dd>
</dl> 

<a data-dropdown="sort-by" class="button dropdown">Sort Results</a>
<dl id="sort-by" data-dropdown-content class="sub-nav sort f-dropdown content">
  <dt><strong>Sort By:</strong></dt>
  <dd class="active"><a class="sort" data-target="end">End Time</a></dd>
  <dd><a class="sort" data-target="price">Price</a></dd>
  <dd><a class="sort" data-target="seller">Seller Reputation</a></dd>
</dl>  

<a data-dropdown="results-per" class="button dropdown">Results Per Page</a>
<dl id="results-per" data-dropdown-content class="sub-nav per f-dropdown content">
  <dt><strong>Per Page:</strong></dt>
  <dd class="active"><a class="per" data-target="100">100</a></dd>
  <dd><a class="per" data-target="75">75</a></dd>
  <dd><a class="per" data-target="50">50</a></dd>
  <dd><a class="per" data-target="25">25</a></dd>
</dl>

感谢巴马尔的帮助,我回答了我自己的问题。

我很困惑,因为我没有意识到这一点this会在里面反弹each().

以下内容实现了我的目标,即通过首先取消隐藏任何隐藏元素,然后应用新过滤器来更改当前过滤器。

if(clname == 'filter')
{
    $('div.item.hide').toggleClass('hide');
    last_selector = (last_selector == null) ? last_selector : $('#sort dd.active > a').attr('data-target');
    $('div.item').each(function(){
        ($(this).attr(datatarget+'-data') == 0) ? $(this).hide() : false;
    });
}

当然,这仅解决基本功能。我仍然需要修改它以维护每页结果规则。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 jQuery 中过滤 div 并根据自定义数据属性标签隐藏它们 的相关文章

  • 隐藏行时更新奇数/偶数行颜色

    我在一页上有几个表格和一个复选框 用于根据其中一个单元格的内容显示 隐藏行 虽然所有行都是可见的 但一切都很完美 并且行颜色根据需要交替 当我隐藏行时 交替的行颜色不再正确 显然 如何轻松更新类以在选中复选框时保持交替行颜色 然后在取消选中
  • 渲染后更改 Fullcalendar 事件源

    我一直在使用 FullCalendar v1 5 3 来替代 MS SharePoint 我正在尝试重新渲染日历事件的源 例如 当页面默认加载时 这是 ajax 调用 日历 事件 feedTasks start 1338094800 end
  • SerializeArray() 给出空数组

    我正在尝试使用 seralizeArray 收获形式输入值 输入字段由具有相应价格的项目列表组成 我想根据相应的密钥对保存每个值 但不断收到错误 empty array with 0 length 我尝试了几种选择器组合 但仍然得到 如何才
  • 随着数据的增加自动填充公式并动态排序[重复]

    这个问题在这里已经有答案了 我想对工作表中的数据进行排序 该工作表每天都会在第二个工作表中获取新行 问题是 如果我使用 SMALL 函数并自动填充单元格直到最后一行 A102482 或类似的内容 我的文件会变得非常巨大且滞后 gt 20mb
  • 在 jQuery 中填充文本框时执行 JavaScript 函数?

    当文本框填充文本时 如何在 JavaScript 中执行函数 文本框对用户隐藏 它将由 USB 磁卡刷卡器填充 伪代码
  • JavaScript 附加和前置与 jQuery 附加和前置

    QA Style 我最近读了一篇文章 里面说JavaScript已经实现了append and prepend受 jQuery 启发的方法 这对我来说是一个新知识 因为据我所知 要附加一个元素 我必须使用element appendChil
  • jQuery 自动完成/Twitter Typeahead 填充多个字段

    我目前正在使用 TypeAhead Bootstrap 但很高兴使用 jQuery Autocomplete 来完成我需要的事情 我有 5 个输入字段 我还有一个结构如下的表 因此我将使用远程数据源 Classification Model
  • 我可以使用 javascript 生成 JSON 文件吗?

    我想在域 example1 com 上创建一个页面 并获取 解析另一个域 example2 com json json 上的 JSON 文件 可以使用 javascript 生成 json 文件 在 example2 com 上 吗 我认为
  • Jquery 对话框部分视图服务器端验证“保存”按钮单击

    我有一个显示数据的表格 表格的每一行都有编辑按钮 单击编辑按钮时 将出现一个 jquery 对话框 其中包含用于编辑用户信息的表单以及保存和取消按钮 表单只不过是部分视图 按钮是部分视图的一部分
  • 如何预览图片上传前后的效果?

    我打算在表单中预览图像或照片 但它不起作用 HTML 代码如下所示
  • 没有重复项的可排序 Java 集合

    我正在寻找可排序 我的意思是在初始化后排序并多次使用比较器 Java 类集合 没有重复项 有没有比编写不透明的代码更纯粹的解决方案 例如防止某些 ArrayList 添加另一个具有与已存在的值相同的值的对象 编辑1 我应该添加一些关于排序的
  • 如何在全日历中显示从数据库中获取事件的时间

    你好朋友在我的应用程序中 我真的制作了一个弹出页面 它在数据库中插入事件 并从数据库中获取事件 但事件没有按时间显示数据 读取有一系列事件 其中包含 eventid eventtitle start end 和格式类似数组 id 10 ti
  • 使用 JavaScript 更改 CSS 类时转义正斜杠 (“/”)

    我需要使用 JavaScript 根据某些条件添加一些 CSS 类 但如果我的字符串包含正斜杠 这就是我的用例 div class disabled div 我什至尝试
  • HTML Canvas - 动态更改文本

    当我在输入文本字段中输入内容时 我试图更改 html 画布上的文本 但是 我可以添加文本 如果我删除并再次输入 新文本将添加到旧文本的顶部 JSFIDDLE https jsfiddle net bm7jv7bk 1 document ge
  • 添加类到父级(LI)

    我有一个元素 A 当我单击它时 我想更改父元素的 LI 类至selected 但没有任何改变 filters list li a click function filters list li removeClass selected thi
  • Javascript:for 与 jQuery.each() 带时间延迟

    Figure 1 for var i Things length 1 i gt 0 i setTimeout function do something with Things i 200 i Figure 2 things each fu
  • jQuery - 禁用选定的选项

    需要使用 jQuery 禁用选择框中已选择的选项 我希望它变灰 就像汇编选择 http www ryancramer com projects asmselect examples example1 html 测试我的例子here http
  • 如何取消 jquery.load()?

    当 load 在 5 秒内没有返回时 我想取消 load 操作 如果是这样 我会显示一条错误消息 例如 抱歉 没有加载图片 我所拥有的是 超时处理 jQuery fn idle function time postFunction var
  • iOS 6 上的 Safari 是否缓存 $.ajax 结果?

    自从升级到 iOS 6 以来 我们看到 Safari 的网页视图擅自缓存 ajax来电 这是在 PhoneGap 应用程序的上下文中 因此它使用 Safari WebView 我们的 ajax电话是POST方法并且我们将缓存设置为 fals
  • jquery 检查某人何时开始在字段中输入

    a next click function var tags input name tags if tags val tags addClass hightlight return false else tags removeClass h

随机推荐