我正在尝试创建一个类似于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写入页面,因为在某些情况下它会重定向并执行各种令人讨厌的事情。有任何想法吗? 感谢
本
答案 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);
var title = dat.split( '<title>' )[1].split( '</title>' )[0];
alert(title);
答案 3 :(得分:-1)
另一种方法是自己寻找标题。幸运的是,与大多数解析您自己的HTML问题不同,查找标题非常简单,因为它不允许任何嵌套元素。在字符串中查找<title>(.*)</title>
之类的内容,您应该设置它。
(是的是,我知道永远不会在html上使用正则表达式,但这是一个非常简单的情况)