Использование jQuery для строки, содержащей HTML - PullRequest
2 голосов
/ 08 ноября 2010

Я пытаюсь создать поле, похожее на поле общего доступа на Facebook, где вы можете ввести URL-адрес, и оно даст вам данные о странице, заголовке, изображениях и т. Д. Я настроил службу на стороне сервера, чтобы получить HTMLсо страницы в виде строки, и я пытаюсь просто получить заголовок страницы.Я попробовал это:

function getLinkData(link) {
  link = '/Home/GetStringFromURL?url=' + link;
  $.ajax({
    url: link,
    success: function (data) {
      $('#result').html($(data).find('title').html());
      $('#result').fadeIn('slow');
    }
  });
}

, который не работает, однако следующее работает:

$(data).appendTo('#result')
var title = $('#result').find('title').html();
$('#result').html(title);
$('#result').fadeIn('slow');

, но я не хочу записывать весь HTML-код на страницу, как в некоторыхна случай, если он перенаправляет и делает всякие неприятные вещи.Есть идеи?Спасибо

Бен

Ответы [ 4 ]

3 голосов
/ 08 ноября 2010

Попробуйте использовать filter вместо find:

$('#result').html($(data).filter('title').html());
2 голосов
/ 08 ноября 2010

Чтобы сделать это с помощью jQuery, .filter - это то, что вам нужно (как указал один день):

$("#result").text($(data).filter("title").text());

Однако не вставляйте HTML-код иностранного документана вашу страницу.Это оставит ваш сайт открытым для атак XSS. Как уже указывалось, это зависит от реализации браузером innerHTML, поэтому он не работает согласованно.

Еще лучше выполнить всю соответствующую обработку HTML на сервере.Отправка только соответствующей информации вашему JS сделает клиентский код значительно проще и быстрее.Вы можете занести в белый список безопасные / нужные теги / атрибуты, не беспокоясь о том, что ваши пользователи отправляют опасные файлы.Обработка HTML на сервере не замедлит работу вашего сайта. Ваш язык уже имеет отлично HTML парсеры , почему бы не использовать их ?.

0 голосов
/ 08 ноября 2010

Когда вы помещаете весь HTML-документ в объект jQuery, все содержимое, кроме <body>, удаляется.

Если все, что вам нужно, это содержимое <title>, вы можете попробовать простое регулярное выражение:

var title = /<title>([^<]+)<\/title>/.exec(dat)[ 1 ];
alert(title);

или с использованием .split():

var title = dat.split( '<title>' )[1].split( '</title>' )[0];
alert(title);
0 голосов
/ 08 ноября 2010

Альтернатива - искать название самостоятельно.К счастью, в отличие от большинства разбора ваших собственных вопросов HTML, найти заголовок очень легко, потому что он не допускает вложенных элементов.Посмотрите в строке что-то вроде <title>(.*)</title>, и вы должны установить.

(да да да, я знаю, никогда не используйте регулярные выражения в html, но это исключительно простой случай)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...