我有这个代码将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>
答案 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再次选择它。
但这都是未经测试的。