Ответ 1
Это регулярное выражение будет отображать URL-адреса и заменять их разметкой embed (только iframe
в соответствии с тем, что в настоящее время выдает YouTube).
str.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, '<iframe width="420" height="345" src="http://www.youtube.com/embed/$1" frameborder="0" allowfullscreen></iframe>');
Однако это может привести к искажению таких вещей, как обработчики событий, связанные со старыми школьными методами.
Это немного сложнее, но лучший способ - работать только с текстовыми узлами.
Это должно выглядеть примерно так...
$('body').contents().each(function() {
// Skip non text nodes.
if (this.nodeType !== 3) {
return true;
}
// Grab text
var matches = this.data.match(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g);
if (!matches) {
return true;
}
var iframe = $('<iframe width="420" height="345" frameborder="0" allowfullscreen />', {
src: 'http://www.youtube.com/embed/' + matches[1]
});
iframe.insertAfter(this);
$(this).remove();
});
Обратите внимание, что это вставляет после всего текста node.