2013-07-03 102 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