2010-08-18 88 views
3

我在JSON文件中包含了大量的值,其中包含場地名稱和他們的聯繫信息以及描述。我想生成一個表格,其中列出了我的頁面上的JSON文件的內容。我希望創建一個實時搜索功能,刪除與檢測到的每個keyUp不再相關的每個條目。jQuery,JSON,搜索等

的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中的venues.json文件搶JSON一個模糊的想法,但一旦我將它包含到.append()中包含所有信息,我真的不知道該如何處理它。我只是在這裏尋找一些有關語法的幫助!

噢,如果您碰巧有任何關於如何在用戶搜索時更新表格的明智想法,它將不勝感激!

愛,

BenjiBee

+0

小挑剔:這不是有效的JSON語法,因爲密鑰中沒有報價。 – 2010-08-18 00:49:23

+0

謝謝,更正。 – Benji 2010-08-18 00:52:43

+0

你爲什麼不嘗試你正在做的事情,從那時起我們可以幫助你? – 2010-08-18 00:55:46

回答

4

你可以使用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的佔位符/容器格:

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

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

然後使用the quickSearch plugin以交互方式過濾該數據。它可以被應用到表(渲染,當然)是這樣的:

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

感謝這樣一個完整的答案,我並沒有期待這麼多。你剛從這個項目中抽出幾天時間。輕鬆知道乾淨的代碼正在互聯網上的某個地方使用。 – Benji 2010-08-18 16:39:21

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); 
} 
+0

我想將兩個答覆都標記爲選定答案。據我所知,兩者同樣有效和快速。非常感謝這段代碼,它非常有幫助,並且可以節省幾個小時將我的頭撞到牆上。 – Benji 2010-08-18 16:37:38