添加YouTube嵌入式视频标题

时间:2013-01-15 16:52:54

标签: javascript jquery regex youtube

我正在尝试遍历页面中的每个YouTube视频(使用iframe嵌入方法)并使用jQuery附加到视频的每个标题。我的HTML看起来像这样:

<div class="video-wrapper">
  <div class="video-container">
    <iframe src="http://www.youtube.com/embed/qzNSsDD_LzE" frameborder="0" allowfullscreen></iframe>
  </div>
</div>
<div class="video-wrapper">
  <div class="video-container">
    <iframe src="http://www.youtube.com/embed/9bZkp7q19f0" frameborder="0" allowfullscreen></iframe>
  </div>
</div>

jQuery看起来像这样:

var video = $('.video-container');
video.each(function() {
  var youTuberegex = /(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=))([\w-]{10,12})/g,
      videoID = youTuberegex.exec($(this).find('iframe').attr('src'))[1];

  $.getJSON('http://gdata.youtube.com/feeds/api/videos/'+videoID+'?v=2&alt=jsonc', function(data){
    var videoTitle = data.data.title;
    video.after('<figcaption>'+videoTitle+'</figcaption>');
  });         
});

所以,我(尝试)拍摄每个视频并使用正则表达式来提取ID。然后,我使用视频Feed检索标题,并将其附加到video-container

这是a jsFiddle。如您所见,问题是每次都附加每个视频的标题。我哪里出错了,这是实现我追求目标的有效方式吗?

1 个答案:

答案 0 :(得分:1)

video 变量是指与选择器“.video-container”匹配的整个对象集,所以当你做

video.after('<figcaption>'+videoTitle+'</figcaption>');

每个人都这样做。

您需要做的是:

video.each(function() {
  var videoBox = $(this)
  var youTuberegex = /(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=))([\w-]{10,12})/g,
      videoID = youTuberegex.exec($(this).find('iframe').attr('src'))[1];

  $.getJSON('http://gdata.youtube.com/feeds/api/videos/'+videoID+'?v=2&alt=jsonc', function(data){
    var videoTitle = data.data.title;
    videoBox.after('<figcaption>'+videoTitle+'</figcaption>');
  });         
});

videoBox变量指向该视频的特定div。