2013-02-16 56 views
0

我在包含完全解析數據的在線頁面中有一個div。例如,一個名爲「信息」的div將包含:解析頁面div到數組中JavaScript

region,sales,cost 
America,12,5 
Europe,32,6 

什麼是在JavaScript/jQuery的最優化(性能明智)的方式:

  1. 閱讀格在頁面(刮內容)
  2. 通過解析格「」
  3. 店它變成一個二維數組

任何幫助,將不勝感激!

+1

通過「閱讀頁面」,你的意思是從另一個頁面/服務器上抓取內容。如果是這樣,客戶端JavaScript不是這項工作的正確工具。 – adeneo 2013-02-16 19:38:07

+0

可以使用Yahoo YQL刮取頁面,並用'$ .getJSON'(或'$ .ajax'或'$ .get')調用YQL,並在JSON結果中返回DIV的內容。否則在你的服務器上設置一個刮刀來解析外部頁面 – charlietfl 2013-02-16 19:41:15

+0

是的adeneo。我需要從不同的頁面上刮取內容。什麼是正確的工具? – 2013-02-16 19:44:03

回答

1
//get string using ajax, JSONP, or whatever means you have 
var str = "region,sales,cost\nAmerica,12,5\nEurope,32,6"; 

var lines = str.split("\n"); 
//first line is names of keys 
var names = lines.shift().split(','); 

var countries = []; 

lines.forEach(function (line) { 
    var obj = {}; 
    line.split(',').forEach(function (piece, idx) { 
     //we know data is well-formed. Name for each piece will exist 
     obj[names[idx]] = piece; 
    }); 
    countries.push(obj); 
}); 
+0

感謝jQuery的調用,我應該看看,以獲得實際的字符串? – 2013-02-16 19:56:04

+0

@fredykruger是你從你自己的域還是從另一個域獲得它? – 2013-02-16 19:56:59

+0

我從我自己的領域刮。 – 2013-02-16 20:01:54

1

我將如何做到這一點是:

var data = [] 
    , text = /*select inner HTML of div*/ 

text.split('\n') 
    .forEach(function (line) { 
     data.push(line.split(',')) 
    }) 

我從iPhone這樣所以請原諒我,如果有幾個錯別字。 如果你的數據沒有完全分解成換行符,我只需要用逗號分隔所有的數據,然後循環它,同時保持一個內部計數器,每隔3個項目打勾,這表明你已經解析了一個新的數據數組。

+0

這太好了,但您如何選擇另一個網站的內部HTML。 JQuery的功能? – 2013-02-16 19:50:59

+0

這有點困難,我不是100%確定。我會專注於使用jQuery的Ajax庫來抓取一個網站。我會採取結果數據並實例化DOM中的一些元素。如果生成的HTML數據是可預測的,你也可以做一些粗糙的正則表達式解析。 (我會遠離後者雖然) – SaamJB 2013-02-16 20:00:37

0

嘗試:

var divContent = $('div').html(); // replace 'div' for correct selector 
var result = new Array(); 

var splitContent = divContent.split('\n'); // Split the content with new line caracter 
// Get the index for initial lines 
var indexes = splitContent[0].split(','); 
// the initial value 1 is for ignore first line 
for (var i = 1; i < splitContent.length; i++) { 
    result[i-1] = new Array(); 
    var items = splitContent[i].split(','); 
    for (var j = 0; j < items.length; j++) { 
     result[i-1][indexes[j]] = items[j]; 
    } 
} 

我測試,這個工程。

ps:請確保標籤沒有其他分界線或此代碼不起作用。