JavaScript可用于加载其他页面的元数据内容吗?

时间:2012-01-19 15:33:46

标签: javascript jquery ajax xmlhttprequest

在我的网站上,所有网页都有<head>的作者:

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

我想创建一个链接页面,并在每个调用该页面的作者元数据内容值旁边使用jQuery。

我尝试过这个并没有用:

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

抱歉,我是一名JS新手。我似乎.load()只获取body标记内的内容?是对的吗?我有什么想法吗?

3 个答案:

答案 0 :(得分:3)

.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请求,这可能是浪费。

答案 1 :(得分:0)

你是对的,来自文档:

  

jQuery使用浏览器的.innerHTML属性来解析检索到的   记录并将其插入当前文档。在此过程中,   浏览器经常过滤文档中的元素,如html,   标题或头元素。结果,检索到的元素   .load()可能与检索文档时不完全相同   直接通过浏览器。

您可以创建一个小型服务器端脚本来获取文档并为您执行html解析并相应地返回元数据。然后,您可以通过ajax调用此脚本。

答案 2 :(得分:0)

您可以分两个阶段使用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,您可以获取作者属性的值。