通过jQuery获取META描述

3
假设我执行一个简单的AJAX请求(使用jQuery),如下:geturl.php?url=http://google.comgeturl.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)
});

1
你只需要描述吗?那么你可以在PHP中解析它。 - Pekka
我支持@Pekka的观点,应该在服务器端完成此操作。另外:正则表达式,HTML,解析,不用多说了吧 - You
2个回答

12
虽然 primatology 的回答是可行的,但关于 jQuery 的说法是错误的。DOM 就是 DOM,jQuery 不在意我们是寻找 <head> 还是 <body> 元素。以下代码也可以正常工作:
$('meta[name="description"]').attr('content');

请确保在元标签加载后调用该函数。

OP 中的错误是使用 val() 函数,该函数用于获取表单元素中 value 属性的值。但由于元标签的值位于 content 属性中,因此它无法起作用。


1

使用正则表达式解析HTML是不好的做法

令人烦恼的是,jQuery不支持解析元素,只支持解析元素。因此,请改用纯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那里抄袭。谢谢,David!

小提琴:http://jsfiddle.net/wCL8W/8/


你为什么不直接使用jQuery.parseXML呢? :P - Esailija
jQuery.parseXML会尝试解析文档作为格式良好的XML,但几乎总是会失败:P - benesch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接