Можно ли использовать JavaScript для загрузки содержимого метаданных другой страницы? - PullRequest
3 голосов
/ 19 января 2012

На моем сайте у всех страниц есть автор в <head>:

<meta name="Author" content="Mark Brown" />

Я хочу создать страницу ссылок и рядом с каждым вызовом значение содержимого метаданных Автор страницы с помощью jQuery.

Я попробовал это, и это не сработало:

.load( '{URLHERE}' + $('meta[name=Author]').attr('content') )

Извините, я новичок в JS.Мне кажется, что .load() получает содержимое только внутри тега body?Это правильно?Есть идеи, как мне это сделать?

Ответы [ 3 ]

3 голосов
/ 19 января 2012

.load загружает содержимое в целевой элемент, который, как вам кажется, не нужен. Вы хотите использовать .get

$.get(url, function() {
    var author = $('meta[name=Author]').attr('content');
    // do what you need with author
})

Редактировать: после того, как указано, что этот код извлекает данные с текущей страницы, а не с нужной, я попробовал что-то вроде этого:

$.get(url, function(result) {
    var author = $(result).find('meta[name=Author]').attr('content');
});

но оказывается, что, хотя у результата есть метатег, поиск ничего не возвращает. Попытка найти div $(result).find('div') работает нормально, хотя. Возможность добавить результат к элементу dom и сделать запрос:

$.get(url, function(result) {
    var dom = $('<div></div>').html(result);
    var author = dom.find('meta[name=Author]').attr('content');
});

Это работает, но смертельно медленно. Я бы порекомендовал подход на стороне сервера для получения этих данных. Решение на стороне клиента будет делать X-запросы, если у вас есть X-ссылки, это, вероятно, пустая трата.

0 голосов
/ 19 января 2012

Вы можете использовать событие load в два этапа:

$("#your-target").load("{URLHERE} meta[name='Author']", function(response, status, xhr){
    var $meta = $("meta", this);

    $(this).text($meta.attr("content"));

    $meta.remove();
});

Сначала будет загружен тег meta в пункт назначения и с помощью complete callback вызначение атрибута Author.

0 голосов
/ 19 января 2012

вы правы, из документов:

jQuery использует свойство браузера .innerHTML для анализа полученного документа и вставки его в текущий документ.Во время этого процесса браузеры часто фильтруют элементы из документа, такие как элементы html, title или head.В результате элементы, полученные с помощью .load (), могут не совпадать, как если бы документ был получен непосредственно браузером.

Вы можете создать небольшой серверный скрипт, который выбирает документвыполняет для вас html-разбор и возвращает метаданные соответственно.Затем вы можете вызвать этот скрипт через ajax.

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