替换文本中的随机youtube链接以使用javascript嵌入代码

替换文本中的随机youtube链接以使用javascript嵌入代码,javascript,parsing,url,search,replace,Javascript,Parsing,Url,Search,Replace,我有一些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>

我有一些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>
文本
http://www.youtube.com/watch?v=QZ2ekuCu4gM&feature=relmfu 
正文
youtube.com/watch?v=adrJx864olE&feature=g-logo-xit
正文
我需要自动将任何YouTube URL替换为在该URL嵌入视频的iFrame,如下所示:

<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>
文本
正文
正文

如何从YouTube搜索HTML代码中的链接,并使用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);​

实际上,这是同一个过程,只是使用了稍微不同的正则表达式

因为有两个地方必须找到
nodeType
等于
3
,还有两个地方创建
iframe
,所以我将这两个
indexOf()包装起来
if
内部进行评估,以测试
节点类型
和抽象的
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);​
      

      实际上,这是同一个过程,只是使用了稍微不同的正则表达式

      因为有两个地方必须找到
      nodeType
      等于
      3
      ,还有两个地方创建
      iframe
      ,所以我将这两个
      indexOf()包装起来
      if
      内部进行评估,以测试
      节点类型
      和抽象的
      iframe
      ——创建一个单独的函数,这两个函数都是为了避免不必要的重复

      参考资料:


      我从数据库中读取html文本,我想在客户端使用javascript进行以下重写。我从数据库中读取html文本,我想在客户端使用javascript进行以下重写。David,我有一个问题。我使用ajax将数据读取到一个div中,但现在无法工作(我有一个空div:如何修改您的解决方案?在加载Ajax内容后,您是否再次调用了该函数?该函数将只运行一次,而不是持续运行,如果添加了新内容,则必须调用该函数来解析该内容。Url在html代码中-这是一个问题。我如何解决此问题?请帮助我David.:-)我很乐意;但是我被你的演示卡住了,因为页面上只添加了一个元素,没有文本。这意味着什么?据我所知,这应该行得通,在我的生活中也行。大卫,我有个问题。我使用ajax将数据读取到一个div中,但现在无法工作(我有一个空div:如何修改您的解决方案?在加载Ajax内容后,您是否再次调用了该函数?该函数将只运行一次,而不是持续运行,如果添加了新内容,则必须调用该函数来解析该内容。Url在html代码中-这是一个问题。我如何解决此问题?请帮助我David.:-)我很乐意;但是我被你的演示卡住了,因为页面上只添加了一个元素,没有文本。这意味着要发生什么?据我所知,这应该是可行的,在我的生活中也是如此。