【问题标题】:jQuery, JSON, searching, etcjQuery、JSON、搜索等
【发布时间】:2011-03-31 07:15:54
【问题描述】:

我在一个 JSON 文件中有大量值,其中包含场地名称及其联系信息以及描述。我想生成一个表格,列出我页面上 JSON 文件的内容。我希望创建一个实时搜索功能,删除与 eachkeyUpdetected 不再相关的每个条目。

JSON

[
    {
        "name": "Aquarium Café Bar",
        "site": "http://www.aquariumcafebar.ca",
        "address": "2923 Masson 728-6116",
        "genre": "default"
    },‎
    {
        "name": "Aréna Pierre “Pete” Morin",
        "site": "none",
        "address": "1925 St-Antoine 634-3471",
        "genre": "default",
    }
]

提议的 HTML

<table>
    <thead>
        <tr>
            <th>Venue</th>
            <th>Address</th>
            <th>Website</th>
            <th>Genre</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Aquarium Caf&eacute; Bar</td>
            <td>2923 Masson 728-6116</td>
            <td>http://www.aquariumcafebar.ca</td>
            <td>Rock</td>
        </tr>
    </tbody>
</table>

我对如何从 jQuery 中的场所.json 文件中获取 JSON 有一个模糊的想法,但是一旦我将它添加到包含所有信息的 .append() 中,我真的不知道如何处理它.我只是在这里寻求语法方面的帮助!

哦,如果您碰巧对如何在用户搜索时更新表格有任何好主意,我们将不胜感激!

爱,

BenjiBee

【问题讨论】:

  • 小问题:这不是有效的 JSON 语法,因为没有引用键。
  • 你为什么不尝试你正在做的事情,从那时起我们可以帮助你?
  • @meder - 感谢您的意见。我并不是要表现得懒惰,也不是要找人为我做这项工作。我不确定最好的方法,正在寻找有关如何最好地解决这个问题的方向和建议。
  • 那我推荐best-practices标签...oh wait.

标签: jquery arrays json search


【解决方案1】:

您可以使用jQuery.tmpl 从 JSON 数据创建一个表,使用如下模板:

<script type="text/html" id="VenueTemplate">
  <table id="VenueResults">
    <thead>
      <tr>
        <th>Venue</th>
        <th>Address</th>
        <th>Website</th>
        <th>Genre</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>${name}</td>
        <td>${address}</td>
        <td>${site}</td>
        <td>${genre}</td>
      </tr>
    </tbody>
  </table>
</script>

这个 jQuery 用于渲染模板并将其注入一个名为 Container 的占位符/容器 div:

var yourJSONData;  // Assuming you've loaded this from wherever.

$('#VenueTemplate').tmpl(yourJSONData)
                   .appendTo('#Container');

然后使用the quickSearch plugin 以交互方式过滤该数据。它可以像这样应用于表格(当然是渲染之后):

$('#SearchInputField').quicksearch('#VenueResults tbody tr');

【讨论】:

  • 感谢您提供如此完整的答案,我没想到这么多。你刚刚从这个项目中节省了好几天。知道互联网上某处正在使用干净的代码,请放心。
【解决方案2】:

如果您不想使用插件,这是一项非常简单的任务。这假定 jQuery 1.4 或更高版本。

试试看:http://jsfiddle.net/ZBKSg/

jQuery

var $tbody = $('table > tbody');

   // Assumes the data is assigned to a variable "data"
for(var i = 0, len = data.length; i < len; i++) {
    var $tr = $('<tr />');
    $('<td/>',{text:data[i].name}).appendTo($tr);
    $('<td/>',{text:data[i].site}).appendTo($tr);
    $('<td/>',{text:data[i].address}).appendTo($tr);
    $('<td/>',{text:data[i].genre}).appendTo($tr);
    $tr.appendTo($tbody);
}

HTML

<table>
    <thead>
        <tr>
            <th>Venue</th>
            <th>Address</th>
            <th>Website</th>
            <th>Genre</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</table>​

你可以像这样加快速度:

试试看:http://jsfiddle.net/ZBKSg/1/

var $tbody = $('table > tbody');
var row = '<tr><td></td><td></td><td></td><td></td></tr>'

for(var i = 0, len = data.length; i < len; i++) {
    var $tr = $(row);
    $tr.children(':first').text(data[i].name)
                .next().text(data[i].site)
                .next().text(data[i].address)
                .next().text(data[i].genre);
    $tr.appendTo($tbody);
}

【讨论】:

  • 我想将两个回复都标记为选择的答案。据我所知,两者都一样高效和快速。非常感谢这段代码,它非常有用,可以节省我用头撞墙的时间。
猜你喜欢
  • 2012-10-21
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-14
相关资源
最近更新 更多