替换文本中的随机youtube链接以使用javascript嵌入代码
Replace random youtube link in text to embed code using javascript
我有一些HTML代码,例如:
<div>Text</div>
http://www.youtube.com/watch?v=QZ2ekuCu4gM&feature=relmfu
<div>Text</div>
youtube.com/watch?v=adrJx864olE&feature=g-logo-xit
<div>Text</div>
<a href="#">LINK</a>
我需要用嵌入视频的iframe自动替换任何YouTube URL,如下所示:
<div>Text</div>
<iframe width="560" height="315"
src="http://www.youtube.com/embed/QZ2ekuCu4gM" frameborder="0"
allowfullscreen></iframe>
<div>Text</div>
<iframe width="560" height="315"
src="http://www.youtube.com/embed/adrJx864olE" frameborder="0"
allowfullscreen></iframe>
<div>Text</div>
<a href="#">LINK</a>
如何在HTML代码中搜索YouTube上的链接,并使用JavaScript将其替换为等效的iframe代码?
这里有一种方法:
function linkYT(el) {
if (!el) {
return false;
}
else {
var children = el.childNodes,
text = [];
for (var i=0, len=children.length; i<len; i++){
var cur = children[i],
nType = cur.nodeType,
content = cur.nodeValue,
url = 'http://www.youtube.com/embed/';
if (nType == 3 && content.indexOf('youtube.com') > -1) {
var embed = content.trim().match(/v=('w+)/)[1],
iframe = document.createElement('iframe');
iframe.src = url + embed;
el.insertBefore(iframe, cur.nextSibling);
cur.parentNode.removeChild(cur);
}
}
}
}
var el = document.getElementById('content');
linkYT(el);
JS Fiddle演示。
请注意,根本没有健全性检查,这种方法要求视频的标识符以v=
开头,并以非字母数字字符结尾。
我只在Opera 12和Chromium 19中进行了测试和验证。
为了解释一个其他形式的YouTube URL格式:
function createIframe(embed, parent, after, url){
if (!embed || !parent || !after) {
return false;
}
else {
url = url ? url : 'http://www.youtube.com/embed/';
var iframe = document.createElement('iframe');
iframe.src = url + embed;
parent.insertBefore(iframe, after.nextSibling);
parent.removeChild(after);
}
}
function linkYT(el) {
if (!el) {
return false;
}
else {
var children = el.childNodes,
text = [];
for (var i=0, len=children.length; i<len; i++){
var cur = children[i],
nType = cur.nodeType,
content = cur.nodeValue,
url = 'http://www.youtube.com/embed/';
if (nType == 3) {
if (content.indexOf('youtube.com') > -1) {
var embed = content.trim().match(/v=('w+)/)[1];
createIframe(embed, el, cur);
}
else if (content.indexOf('youtu.be') > -1) {
var embed = content.trim().match(/be'/('w+)/)[1];
createIframe(embed, el, cur);
}
}
}
}
}
var el = document.getElementById('content');
linkYT(el);
JS Fiddle演示。
实际上,这是一个相同的过程,只是有一个稍微不同的正则表达式。
因为有两个地方必须找到nodeType
等于3
和创建iframe
s的两个地方,所以我将两个indexOf()
评估封装在if
中,以测试nodeType
,并将iframe
-创建抽象为一个单独的函数,这两个函数都是为了避免不必要的重复。
参考文献:
childNodes
- CCD_ 10
- CCD_ 11
insertBefore()
nextSibling
match()
nodeType
- CCD_ 16
parentNode
- 正则表达式
- CCD_ 18
trim()
相关文章:
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 面向对象的Javascript代码在IE7中不起作用
- 通过命令行/批处理文件打开页面时,将javascript代码注入Google Chrome
- JavaScript代码问题:我正在将对象转换为数组
- Javascript阻止其他Javascript代码
- JavaScript代码未正确检查ajax请求
- 如何调试Javascript代码或函数
- 为什么我在这个javaScript代码中使用NaN
- 将javascript代码转换为jquery代码时出错
- 如何从Objective-C代码中调用javascript代码
- 有什么工具可以轻松读取javascript代码吗
- 这个javascript代码是如何编写的
- 如何解密此javascript代码
- SIMPLE Javascript代码,用于显示谷歌电子表格中单个字段的数据
- HTML标记,包含带引号的JavaScript代码中的引号
- 如何在Win8Metro应用程序的Javascript代码中捕获自己的C#事件
- addEventListener的Javascript代码不工作!?(单击时打开放大的img)
- JavaScript代码无法在表单上呈现部分
- 以下 JavaScript 代码与 Facebook 相关
- 使用解析为javascript源的.php,如何使用条件语句将javascript代码封装在php括号之间