【问题标题】:Getting META description via jQuery通过 jQuery 获取 META 描述
【发布时间】:2012-02-02 19:43:21
【问题描述】:

假设我做了一个简单的 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)
});

【问题讨论】:

标签: php jquery


【解决方案1】:

虽然灵长类动物学的回答确实有效,但关于 jQuery 的说法是错误的。 DOM 是一个 DOM。 jQuery 不关心我们是在寻找 &lt;head&gt; 还是 &lt;body&gt; 元素。以下工作正常:

$('meta[name="description"]').attr('content');

只需确保在加载元标记后调用该函数即可。

OP中的错误是使用val()函数,该函数用于获取表单元素中value属性的值。但是由于元标记的值存在于content 属性中,所以它不起作用。

【讨论】:

    【解决方案2】:

    使用正则表达式解析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中撕下。谢谢,大卫!

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

    【讨论】:

    • 你为什么不直接使用 jQuery.parseXML ? :P
    • jQuery.parseXML 将尝试将文档解析为格式正确的 XML,这几乎总是会失败:P
    猜你喜欢
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多