我有一个服务器端函数,它返回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页面获取标题:
'click .add_tag':function(e,t){ //Session.set('editing_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'版本有效?
答案 0 :(得分:1)
根据要求,我将重申我的评论作为答案......
我会坚持使用正则表达式,即使你不喜欢它。构建一个基本上是整个页面的DOM元素有很大的开销,纯粹是为了解析少量文本。正则表达式更轻巧,可以在较慢的浏览器或较慢的机器上充分运行。
答案 1 :(得分:0)
在response.content
中换行<div>
,然后选择该选项。这样你就有了一个合适的结构来开始,而不是你可能真正得到的数组。
var $wrap = $("<div></div>").html(response.content);
$wrap.find("title").text();
可能发生的事情的一个例子:http://jsfiddle.net/UFtJV/
答案 2 :(得分:0)
不要忘记一件事:你永远不应该将HTML返回给客户端。您应该返回Json(甚至是Xml),您的客户端将使用Template转换为Html。 你做的很多开发人员正在做坏Ajax。
不要忘记:“只有线上的数据,不显示”。
因此,应该没有任何问题,因为您只需要从Json格式的响应中获取数据并将其注入模板中。