【问题标题】:Display Filterable JSON Data显示可过滤的 JSON 数据
【发布时间】:2014-10-20 00:24:03
【问题描述】:

我有按星期几分隔的 JSON 数据。

如果数据只是按日期列出而不是按天在它自己的数组中列出,我通常会使用数据表以便它可以过滤。但是,我正在尝试分离数据,使其具有标题,如下所示:

有了这个 json 数据,我不确定如何使用数据表来执行此操作并使其可过滤。有没有人有任何建议(插件等)我应该用来在可过滤的环境中以我想要的方式显示数据?

这最终是我想要显示数据的方式:

<div id="day_of_week">August 26, 2014</div>
<div id="event">
    <span id="time">5:52 AM</span>
    <span id="event_name">Page View</span>
    <div id="hidden_data">Data: Goes here</div>
</div>

【问题讨论】:

  • 带有过滤器的 Angularjs ngrepeat 可能对你有用.. docs.angularjs.org/api/ng/directive/ngRepeat
  • 你怎么知道他在用 angular?
  • 我没有使用 angular,但它听起来确实是一个值得研究的解决方案,除非仅将 angular 用于此特定目的不值得?
  • Angular 是一个完整的框架,如果你只是为了这个而使用它就不值得使用它
  • 我不知道他在使用角度。我实际上认为他不是,因为他没有提到。如果他提到他正在使用它,我会把它作为一个答案,而不仅仅是一个建议。

标签: javascript jquery json datatables filtering


【解决方案1】:

你应该使用模板逻辑,就像@Thimoty 建议的那样,手动实现很难,因为你需要它是轻量级的。我正在制作小提琴,我会尽快发布。

就是这样:http://jsfiddle.net/23e37v18/

HTML

 <div id="content">
    </div>
    <div id="template" style="display: none">
    <div class="day_of_week">August 26, 2014</div>
    <div class="event">
        <span class="time"></span>
        <span class="event_name"></span>
        <div class="hidden_data"></div>
    </div>
    </div>

jQuery

var jsonText = '{"August 23, 2014":{"1409069553":{"Data":"Your event"},"1407859953 ":{"Data":"Your event"},"1399911153":{"Data":"Your event"}},"August 24, 2014":{"1409069553":{"Data":"Your event"},"1399911139 ":{"Data":"Your event"},"1399914139":{"Data":"Your event"}},"August 25, 2014":{"1407859953 ":{"Data":"Your event"}}}';

$(document).ready(function(){
    var data = JSON.parse(jsonText);
    for (var day in data){
        $('#content').append(day + '<br/>');
        // create block
        var blockData = data[day];
        var block = $('<div/>').addClass('event_block');

        for (var event in blockData){
            // your event block
            var eventDOM = $('#template .event').clone();

            // add content
            var date = new Date(event*1000)
            // TODO: format date for display
            $('.time', eventDOM).append(date);
            $('.time', eventDOM).append(blockData[event].Data);
            block.append(eventDOM);
        }

        $('#content').append(block);
    }
});

【讨论】:

  • 哇,你真好。谢谢@LoyaltyTechnology
  • 太棒了!您是否介意阐明一种使这种可过滤的可能方法?通过事件类中的任何文本?这就是我最大的问题所在。解析没有问题,只是想过滤结果的时候不知道怎么解析。
  • 这是另一个问题 :) 但我会给你一个提示。先接受答案。
  • 这里是更新的小提琴:jsfiddle.net/23e37v18/2。最简单的过滤是使用类,这样您就可以添加多个条件并实现 AND 逻辑(例如,类型 2 的事件在其描述中包含一些字符串)。
  • 嗯,有道理。如果我要拥有大量数据,那么制作一个完整的其他 filterData 数组似乎有点违反直觉。时间数组中将有更多的 10 个对象,而不仅仅是data。我真的很感谢你的帮助。我希望我不会表现得不欣赏。
猜你喜欢
  • 2016-05-05
  • 2022-10-19
  • 1970-01-01
  • 2023-03-16
  • 2017-12-25
  • 1970-01-01
  • 1970-01-01
  • 2015-07-08
  • 1970-01-01
相关资源
最近更新 更多