假设有一个div包含内容和youtube链接。我想抓住youtube链接并嵌入它。
<div id="content"><p>Here is a cool video. Check it out: http://www.youtube.com/watch?v=oHg5SJYRHA0</p></div>
我想获取链接并使用js(jquery)将其替换为嵌入代码。
更新1:
到目前为止,这是我的js:
$("#content").each(function(){
var allContent = $(this).html();
//need regex to find all links with youtube in it, ovbiously it can't == youtube.com, but basically the link has to have youtube.com in it.
if ($("a",allContent).attr("href") == "youtube.com" ) {
// grab youtube video id
/* replace link with <div id="yt-video">
<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/429l13dS6kQ&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/429l13dS6kQ&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>
</div>
*/
}
});
答案 0 :(得分:15)
我将content
从id改为了类,因为我猜你有多个内容区域?
我确信有一种更有效的方法可以做到这一点,但这是我的尝试。 注意我吮吸正则表达式,所以我拥有的尽可能接近,我确信有人可以帮助改进它,所以它不必替换里面的?v=
每个循环。
HTML
<div class="content"><p>Here is a cool video. Check it out: http://www.youtube.com/watch?v=oHg5SJYRHA0 and this one http://www.youtube.com/watch?v=fLBPsZVI8Gc&feature=player_embedded</p></div>
<div class="content"><p>Here is a cool video. Check it out: http://www.youtube.com/watch?v=fLBPsZVI8Gc&feature=player_embedded</p></div>
脚本
$(document).ready(function(){
// I added the video size here in case you wanted to modify it more easily
var vidWidth = 425;
var vidHeight = 344;
$('.content:contains("youtube.com/watch")').each(function(){
var that = $(this);
var txt = $(this).html();
// Tthis could be done by creating an object, adding attributes & inserting parameters, but this is quicker
var e1 = '<obj'+'ect width="' + vidWidth + '" height="' + vidHeight + '"><param name="movie" value="http://www.youtube.com/v/';
var e2 = '&hl=en&fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" ' +
'value="always"></param><em'+'bed src="http://www.youtube.com/v/';
var e3 = '&hl=en&fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="' + vidWidth +
'" ' + 'height="' + vidHeight + '"></embed></object> ';
var vid = txt.match(/((\?v=)(\w[\w|-]*))/g); // end up with ?v=oHg5SJYRHA0
if (vid.length) {
$.each(vid, function(i){
var ytid = this.replace(/\?v=/,'') // end up with oHg5SJYRHA0
that.append( e1 + ytid + e2 + ytid + e3 )
})
}
})
})
我会第一个承认它不漂亮但它有效。我还在this pastebin
中粘贴了此代码的工作版本更新:我已经清理了一下代码,现在的样子(demo):
$(document).ready(function(){
// I added the video size here in case you wanted to modify it more easily
var vidWidth = 425;
var vidHeight = 344;
var obj = '<object width="' + vidWidth + '" height="' + vidHeight + '">' +
'<param name="movie" value="http://www.youtube.com/v/[vid]&hl=en&fs=1">' +
'</param><param name="allowFullScreen" value="true"></param><param ' +
'name="allowscriptaccess" value="always"></param><em' +
'bed src="http://www.youtube.com/v/[vid]&hl=en&fs=1" ' +
'type="application/x-shockwave-flash" allowscriptaccess="always" ' +
'allowfullscreen="true" width="' + vidWidth + '" ' + 'height="' +
vidHeight + '"></embed></object> ';
$('.content:contains("youtube.com/watch")').each(function(){
var that = $(this);
var vid = that.html().match(/(?:v=)([\w\-]+)/g); // end up with v=oHg5SJYRHA0
if (vid.length) {
$.each(vid, function(){
that.append( obj.replace(/\[vid\]/g, this.replace('v=','')) );
});
}
});
});
答案 1 :(得分:3)
我和fudgey在同一条轨道上,但是我甚至比他更吸引人,因此我已经“借用”了他的代码,直到那时为止。我做的一个改变是使用swfobject嵌入视频而不是手动编写嵌入代码。它只是意味着您必须将swfobject库添加到页面
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.1/swfobject.js"></script>
HTML与fudgey的
相同<div class="content"><p>Here is a cool video. Check it out: http://www.youtube.com/watch?v=oHg5SJYRHA0 and this one http://www.youtube.com/watch?v=fLBPsZVI8Gc&feature=player_embedded</p></div>
<div class="content"><p>Here is a cool video. Check it out: http://www.youtube.com/watch?v=fLBPsZVI8Gc&feature=player_embedded</p></div>
对javascript的小改动
$(function(){
// I added the video size here in case you wanted to modify it more easily
var vidWidth = 425;
var vidHeight = 344;
$('.content:contains("youtube.com/watch")').each(function(i){
var that = $(this);
var txt = $(this).html();
var vid = txt.match(/((\?v=)(\w[\w|-]*))/g); // end up with ?v=oHg5SJYRHA0
if (vid.length) {
$.each(vid, function(x){
var ytid = this.replace(/\?v=/,'') // end up with oHg5SJYRHA0
var playerid = 'videoplayer_' + i + "_" + x;
that.append("<div id='" + playerid + "'></div>");
swfobject.embedSWF("http://www.youtube.com/v/" + ytid, playerid, vidWidth, vidHeight, "8");
})
}
})
})
感谢Fudgey的回答
答案 2 :(得分:1)
您需要使用以下内容获取div的内容:
var text = $("div#content p").html(); // or .text()
使用该文本,您可以使用字符串操作或正则表达式来查找URL。 然后,您可以创建要添加的jquery内容:
var content = $('<a href="...">...</a>');
并使用jquery的操作方法将其添加到某些内容中,例如
var destination = $("body");
destination.append(content);
要获得更多详细信息,您的问题将需要更多详细信息。