2013-07-03 3 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) { //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 («название» или «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), который ваш клиент будет преобразовывать в Html, используя Template. Вы делаете, как много разработчиков, делающих Bad Ajax.

Не забывайте: «только данные на проводе, а не на дисплее».

Так что не должно быть никаких проблем coz, при ответе вам просто нужно взять данные с отформатированного ответа Json и ввести его в свой шаблон.

+0

Я делаю службу закладок. Я получаю URL-адрес веб-сайта от пользователя и хочу сохранить URL-адрес сайта и имя сайта в базе данных. Я не могу получить JSON с любого сайта на WEB – demas

+0

Хорошо, я понимаю, что у меня также есть приложение, которое сканирует веб-сайт. Но на самом деле я разбираю веб-страницу, создаю сущность на основе анализируемой информации и храните ее в базе данных. Затем я могу запросить базу данных, чтобы вернуть Json из службы отдыха с использованием методов Meteor. Вы можете удалить часть базы данных и вернуть данные Json. – Rebolon

Смежные вопросы