2013-07-03 72 views
0

的头衔,我有一个服务器端函数返回的HTML页面的内容:获得从HTML

if (Meteor.isServer) { 
    Meteor.startup(function() { 
    // code to run on server at startup 

    Meteor.methods({ 
     sayHello: function() { 
     var response = Meteor.http.call("GET", "http://google.com"); 
     return response; 
     } 
    }); 
    }); 

而且我有,我想从这个HTML页面获得标题客户端代码:

“点击.add_tag':function(e,t){'titing_tag_id',e.target.id};

Meteor.call("sayHello", function(err, response) { 
    var title = $(response.content).find("title").text(); 
    var title2 = $(response).find("title").text(); 
    var title3 = response.content.match(/<title[^>]*>([^<]+)<\/title>/)[1]; 
    alert(title3); 
    }); 

我想获得jQuery版本('title'或'title2'),但它不起作用。它返回空字符串。

'Title3' - 版本工作正常,但我不喜欢正则表达式。 :)

有什么办法可以使'jQuery'版本的作品?

+1

即使您不喜欢它,我也会坚持使用正则表达式。构建基本上是整个页面的DOM元素有很大的开销,纯粹是为了解析少量文本。正则表达式更加轻量级,并且可以在较慢的浏览器或较慢的机器上充分执行。 – Craig

+0

嗯......可能你是对的。你可以请添加这个答案,我会接受吗? – demas

+0

'document.title'? – Blowsie

回答

1

按照要求,我将重申作为一个答案我的意见......

我会坚持使用正则表达式,即使你不喜欢它。构建基本上是整个页面的DOM元素有很大的开销,纯粹是为了解析少量文本。正则表达式更加轻量级,并且可以在较慢的浏览器或较慢的机器上充分执行。

0

response.content换成<div>,然后做出选择。这样你就可以从一个适当的结构开始,而不是一个可能实际获得的数组。

var $wrap = $("<div></div>").html(response.content); 
$wrap.find("title").text(); 

的东西很可能将上一个例子:http://jsfiddle.net/UFtJV/

0

不要忘记一两件事:你永远不应该返回HTML到客户端。您应该返回Json(甚至是Xml),您的客户端将使用Template转换为Html。 你正在做很多开发Bad Ajax的开发者。

不要忘记:“只有线上的数据,而不是显示”。

所以不应该有任何问题,因为你只需要从Json格式化的响应中获取数据并将其注入到模板中。

+0

我做一个书签服务。我从用户那里获取网站的URL,并且想要将网站网址和网站名称存储到数据库中。我无法从WEB上的任何站点获取JSON – demas

+0

好吧,我明白因为我也有一个抓取网站的应用程序。但事实上,我解析网页,建立一个基于解析信息的实体,并将其存储在数据库中。然后我可以查询数据库以使用Meteor方法从其他服务返回Json。您可以删除数据库部分并返回Json数据。 – Rebolon