在包含HTML的字符串上使用jQuery

时间:2010-11-08 12:40:22

标签: javascript jquery html ajax

我正在尝试创建一个类似于facebook共享框的字段,您可以在其中输入网址,它会为您提供有关页面,标题,图片等的数据。我已经设置了服务器端服务来获取HTML从页面作为字符串,我试图获取页面标题。我试过这个:

function getLinkData(link) {
  link = '/Home/GetStringFromURL?url=' + link;
  $.ajax({
    url: link,
    success: function (data) {
      $('#result').html($(data).find('title').html());
      $('#result').fadeIn('slow');
    }
  });
}

不起作用,但以下情况如下:

$(data).appendTo('#result')
var title = $('#result').find('title').html();
$('#result').html(title);
$('#result').fadeIn('slow');

但我不想将所有HTML写入页面,因为在某些情况下它会重定向并执行各种令人讨厌的事情。有任何想法吗? 感谢

4 个答案:

答案 0 :(得分:3)

尝试使用filter而不是find

$('#result').html($(data).filter('title').html());

答案 1 :(得分:2)

要使用jQuery执行此操作,.filter就是您所需要的(正如lonesomeday指出的那样):

$("#result").text($(data).filter("title").text());

将外国文档的HTML插入到您的页面中。这将使您的网站对XSS攻击开放。 正如已经指出的,这取决于浏览器的innerHTML实现,因此它不能一致地工作。

更好的是在服务器上执行所有相关的HTML处理。仅向JS发送相关信息将使客户端代码更加简单更简单,更快捷。您可以将安全/所需的标签/属性列入白名单,而无需担心会向您的用户发送危险信息。在服务器上处理HTML不会减慢您的网站速度。 Your language already has excellent HTML parsers,为什么不使用它们?

答案 2 :(得分:0)

当您将整个HTML文档放入jQuery对象时,<body>的所有内容都会被删除。

如果你需要的只是<title>的内容,你可以尝试一个简单的正则表达式:

var title = /<title>([^<]+)<\/title>/.exec(dat)[ 1 ];
alert(title);

using .split()

var title = dat.split( '<title>' )[1].split( '</title>' )[0];
alert(title);

答案 3 :(得分:-1)

另一种方法是自己寻找标题。幸运的是,与大多数解析您自己的HTML问题不同,查找标题非常简单,因为它不允许任何嵌套元素。在字符串中查找<title>(.*)</title>之类的内容,您应该设置它。

(是的是,我知道永远不会在html上使用正则表达式,但这是一个非常简单的情况)