2013-02-16 54 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:请确保标签没有其他分界线或此代码不起作用。