[英]Iterating over all tags in a string containing HTML using javascript/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.