0

我有一个返回 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'-versions 工作吗?

4

3 回答 3

1

根据要求,我将重申我的评论作为答案......

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

于 2013-07-05T08:00:10.753 回答
0

不要忘记一件事:您永远不应该将 HTML 返回给客户端。您应该返回您的客户端将使用模板转换为 Html 的 Json(甚至是 Xml)。你做的就像很多开发者做 Bad Ajax 一样。

不要忘记:“仅在线数据,不显示”。

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

于 2013-07-04T14:23:32.737 回答
0

包裹response.content在 a 中<div>,然后从中进行选择。这样你就有了一个合适的结构来开始,而不是你可能实际得到的数组。

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

可能发生的事情的一个例子:http: //jsfiddle.net/UFtJV/

于 2013-07-03T16:00:04.380 回答