我正在使用静态网站生成器(Hugo),它将源中的所有纯文本URL转换为指向同一URL的超链接,例如。
<p><a href="https://www.youtube.com/watch?v=xLrLlu6KDss">https://www.youtube.com/watch?v=xLrLlu6KDss</a></p>
我宁愿将其作为嵌入式视频。
有很多代码位可以将纯文本YouTube网址转换为有效的嵌入版本(example),但如何在进行超链接时获得嵌入功能?
或者,如果有人可以帮我将链接值与链接名称相同的所有href链接转换为纯URL?例如如何更换
<p><a href="https://www.youtube.com/watch?v=xLrLlu6KDss">https://www.youtube.com/watch?v=xLrLlu6KDss</a></p>
与
https://www.youtube.com/watch?v=xLrLlu6KDss
答案 0 :(得分:0)
这样做的最佳方法是让Hugo自己制作嵌入代码。如果您愿意,可以将HTML代码直接放在降价文档中,或者为了使其更容易,您可以使用shortcode。雨果甚至有built-in shortcode for YouTube。
{{< youtube xLrLlu6KDss >}}
如果您将其放入降价文档中,Hugo会在生成页面时嵌入YouTube视频,并且不需要任何自定义jQuery代码。
修改强>
如果您必须使用JavaScript执行此操作,则可以执行以下操作。 (注意:此示例需要jQuery。)
$("a").each(function () {
// Exit quickly if this is the wrong type of URL
if (this.protocol !== 'http:' && this.protocol !== 'https:') {
return;
}
// Find the ID of the YouTube video
var id, matches;
if (this.hostname === 'youtube.com' || this.hostname === 'www.youtube.com') {
// For URLs like https://www.youtube.com/watch?v=xLrLlu6KDss
matches = this.search.match(/[?&]v=([^&]*)/);
id = matches && matches[1];
} else if (this.hostname === 'youtu.be') {
// For URLs like https://youtu.be/xLrLlu6KDss
id = this.pathname.substr(1);
}
// Check that the ID only has alphanumeric characters, to make sure that
// we don't introduce any XSS vulnerabilities.
var validatedID;
if (id && id.match(/^[a-zA-Z0-9]*$/)) {
validatedID = id;
}
// Add the embedded YouTube video, and remove the link.
if (validatedID) {
$(this)
.before('<iframe width="200" height="100" src="https://www.youtube.com/embed/' + validatedID + '" frameborder="0" allowfullscreen></iframe>')
.remove();
}
});
循环浏览页面中的所有链接,检查它们是否来自YouTube,查找视频ID,验证ID,然后将链接转换为嵌入视频。定制&#34; a&#34;可能是一个好主意。选择器仅指向内容区域中的链接,而不是整个页面。另外,我猜这对于有很多链接的页面来说可能会很慢;如果是这样的话,你可能需要做一些性能调整。