代码不适用于ajax寻呼机

时间:2015-05-10 00:37:53

标签: jquery ajax drupal

我有这个代码将youtube链接转换为嵌入,但是我为我的论坛帖子制作了一个Ajax寻呼机,现在当我转到另一个页面时,链接不再转换为嵌入(它的drupal和views pager )。该怎么办?

<script>
$(function() {
    $( "a:contains('youtu')" ).each(function() {
        var yt_url = this.href,
            yt_id = yt_url.split('?v=')[1],
            yt_title = $(this).text();
        $(this).replaceWith('<div class="youtube-box" style="background-image:url(http://img.youtube.com/vi/' + yt_id + '/0.jpg);"><span class="youtube-title">' + yt_title + '</span><span class="youtube-bar"><span class="yt-bar-left"></span><span class="yt-bar-right"></span></span><span class="youtube-play">Start</span></div>');
        $('div.youtube-box').click(function() {
            $(this).replaceWith('<iframe class="youtube-frame" src="http://www.youtube.com/embed/' + yt_id + '" allowfullscreen></iframe>');
        });
    });
});
</script>

1 个答案:

答案 0 :(得分:0)

这是因为你的javascript在加载页面时运行,而不是在ajax调用之后运行。 您应该使用drupal behaviors。 drupal行为对象中的函数在页面加载后以及ajax调用完成后运行 这样做:

(function($) {
      Drupal.behaviors.mybehavior = {
        attach:function(context, settings){

          $( "a:contains('youtu')", context ).each(function() {
              var yt_url = this.href,
                  yt_id = yt_url.split('?v=')[1],
                  yt_title = $(this).text();
              var newstuff = $('<div class="youtube-box" style="background-image:url(http://img.youtube.com/vi/' + yt_id + '/0.jpg);"><span class="youtube-title">' + yt_title + '</span><span class="youtube-bar"><span class="yt-bar-left"></span><span class="yt-bar-right"></span></span><span class="youtube-play">Start</span></div>');
              newstuff.click(function() {
                  $(this).replaceWith('<iframe class="youtube-frame" src="http://www.youtube.com/embed/' + yt_id + '" allowfullscreen></iframe>');
              });
              $(this).replaceWith(newstuff);
          });
        }
      };
})(jQuery);

我还稍微更改了代码以将新内容存储在变量中,以便不必使用jquery再次选择它。
但这都是未经测试的。