如何在页面加载时使用jQuery将youtubevideourl转换为iframe嵌入代码?
我有一个WYSIWYG textarea,有时用户可以在框中输入youtube url。 在服务器端,有htmlfilter,以防止“有害”代码被保存。
所以相反,我想保持服务器代码不变,并运行一个jQuery文档就绪事件,搜索youtube链接的文本块,并将其转换为iframe嵌入代码。
我想它会以正则表达式为基础,但我对正则表达式非常可怕(在某些时候,我真的需要坐下来研究它们)。
两种类型的YouTube链接:
http://www.youtube.com/watch?v=t-ZRX8984sc
要么
http://youtu.be/t-ZRX8984sc
这个正则表达式将获取URL并用嵌入标记替换它们(根据YouTube目前输出的内容只是一个iframe
)。
str.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, '');
jsFiddle 。
但是,这可能会破坏诸如附带旧学校方法的事件处理程序之类的东西。
它有点复杂,但最好的方法是仅使用文本节点。
应该看起来像这样……
$('body').contents().each(function() { // Skip non text nodes. if (this.nodeType !== 3) { return true; } // Grab text var matches = this.data.match(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g); if (!matches) { return true; } var iframe = $('', { src: 'http://www.youtube.com/embed/' + matches[1] }); iframe.insertAfter(this); $(this).remove(); });
请注意,这将在整个文本节点之后插入。
var yturl= /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([\w\-]{10,12})(?:&feature=related)?(?:[\w\-]{0})?/g; var ytplayer= ''; str.replace(yturl, ytplayer);
确保在WYSIWYG编辑器的组织中正确操作