假设我做了一个简单的AJAX请求(在jQuery中),如geturl.php?url=http://google.com
和geturl.php
就是这样:
<?php
if($_GET['url'])
{
$url=$_GET['url'];
echo file_get_contents($url);
}
?>
简单,对吧?
我如何从jQuery中返回的(非常长的)字符串中获取META描述?
这是我到目前为止所拥有的。是的,我知道,desc
是错误的。
$.get("geturl.php?url="+url,function(response)
{
// Loading <title></title>data
var title=(/<title>(.*?)<\/title>/m).exec(response)[1];
var desc = $("meta[name=description]").val();
$("#linkbox").html("<div><b>"+title+"</b><br/>"+url+"<br />Desc: " + desc)
});
答案 0 :(得分:12)
虽然primatology的答案确实有效,但关于jQuery的陈述是错误的。 DOM是一个DOM。 jQuery不关心我们是否在寻找<head>
或<body>
元素。以下工作正常:
$('meta[name="description"]').attr('content');
只需确保在加载元标记后调用该函数。
OP中的错误是使用val()
函数,该函数用于获取表单元素中value
属性的值。但由于元标记的值位于content
属性中,因此无效。
答案 1 :(得分:1)
使用正则表达式解析HTML是bad practice。
令人讨厌的是,jQuery不支持解析head
中的元素,只支持body
。所以直接使用JS:
window.onload = function(){
$.ajax({
type: 'GET',
url: '/',
dataType: 'html',
success: function(data) {
//cross platform xml object creation from w3schools
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(data);
}
catch(e)
{
try // Firefox, Mozilla, Opera, etc.
{
parser=new DOMParser();
xmlDoc=parser.parseFromString(data,"text/xml");
}
catch(e)
{
alert(e.message);
return;
}
}
var metas = xmlDoc.getElementsByTagName("meta");
for (var i = 0; i < metas.length; i++) {
if (metas[i].getAttribute("name") == "description") {
alert(metas[i].getAttribute("content") || metas[i].getAttribute("edit"));
}
}
}
});
}
无耻地从David Burrows扯下来。谢谢,大卫!