繁体   English   中英

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

[英]Using jQuery on a string containing HTML

我正在尝试创建一个类似于facebook共享框的字段,您可以在其中输入url,它为您提供有关页面,标题,图片等的数据。我已经设置了服务器端服务以从页面获取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都写到页面,因为在某些情况下它会重定向并执行各种令人讨厌的事情。 有任何想法吗? 谢谢

尝试使用filter而不是find

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

要使用jQuery来做到这一点,.filter是您所需要的(正如lonesomeday所指出的):

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

但是, 请勿将外部文档的HTML插入页面中。 这将使您的站点容易受到XSS攻击。 正如已经指出的那样,这取决于浏览器的innerHTML实现,因此它不能始终如一地工作。

更好的是在服务器上进行所有相关的HTML处理。 仅将相关信息发送到您的JS将使客户端代码大大简化和更快。 您可以将安全/期望的标签/属性列入白名单,而不必担心将危险的信息发送给用户。 在服务器上处理HTML不会减慢您的网站速度。 您的 语言 已经具有 出色的 HTML 解析器 ,为什么不使用它们呢?

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

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

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

使用.split()

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM