10
votes

Trouver tous les liens YouTube avec JS (JQuery)

Disons qu'il y a une DIV qui a du contenu et un lien YouTube. Je veux attraper ce lien YouTube et l'intégrer. XXX

Je veux saisir le lien et le remplacer par le code de l'intégration avec JS (jQuery).

Mise à jour 1 :

Ceci est mon JS jusqu'à présent: xxx


2 commentaires

La réponse La question de cette question pourrait aider avec la partie REGEX: Stackoverflow.com/questions/1713222/...


BTW Il y a une API YouTube JavaScript qui est raisonnablement facile à utiliser et assez puissant (listes de lecture, etc.) développeurs.google.com/ YouTube / js_api_reference


3 Réponses :


1
votes

Vous aurez besoin d'obtenir le contenu de la div avec quelque chose comme ceci: xxx

avec ce texte, vous pouvez utiliser une manipulation de chaîne ou des expressions régulières pour trouver l'URL. Ensuite, vous pouvez créer du contenu JQuery à ajouter avec: xxx

et ajoutez-le à quelque chose avec les méthodes de manipulation de jQuery, comme xxx

Pour obtenir plus de détails que cela, votre question aura besoin de plus de détails.


1 commentaires

J'ai mis à jour ma question avec mon JS actuel. J'ai ajouté des commentaires à ce dont j'ai besoin ou ce que je suis coincé.



16
votes

J'ai changé le contenu d'un identifiant à une classe parce que je devinais que vous auriez plus d'une zone de contenu?

Je suis sûr qu'il y a un moyen beaucoup plus efficace de faire Ceci, mais c'est ma tentative de ça. note je suce à regex, alors ce que j'ai est aussi proche que je peux obtenir, je suis sûr que quelqu'un peut aider à l'améliorer, il n'est donc pas nécessaire de remplacer le ? v = à l'intérieur de chaque boucle.

html xxx

script xxx

i ' Soyez le premier à admettre que ce n'est pas joli, mais ça marche. J'ai également collé une version de travail de ce code dans Ce pastebin


mise à jour: i J'ai nettoyé le code un peu, voici comment il regarde maintenant ( Demo ): < Pré> xxx


5 commentaires

Bonne réponse, seulement le changement est dans ma réponse ci-dessous


Bonjour, je veux aussi supprimer le lien YouTube et le remplacer par la vidéo, comment puis-je faire cela?


@Waseem: J'ai mis à jour la démo ( jsfiddle.net/9r7pj/20 ), mais je suce toujours chez regex. J'ai ajouté cette ligne that.html (fonction (i, h) {retour h.replace (/ (http: \ / \ / www.youtube.com \ / watch \? V = \ w + ((\ & \ w + = \ w +) +)?) / g, '');}); et j'ai testé la regex ( Rubular.com/R/Qiovgv8Str ) et il semblait y travailler, mais pas à Jsfiddle ... Donc je n'ai aucune idée. De toute façon, vous pouvez supprimer manuellement les paramètres supplémentaires de l'URL si vous devez.


@Fudgey j'ai modifié la regex et cela a fonctionné bien, vérifiez-le dans Jsfiddle ici jsfiddle.net/9r7pj/21


@Waseem: Je viens de remarquer que YouTube fournit un code iFrame par défaut maintenant. Je suppose que ça va travailler avec des iphones ou quelque chose. Juste une tête up;)



3
votes

J'étais sur la même voie que maquillée que fudgey, mais je suce une regregyps encore plus que lui, alors j'ai "emprunté" son code jusqu'à ce moment-là. Un changement que j'ai fait est d'utiliser SWFObject pour intégrer la vidéo plutôt que de faire face au code de l'intégration. Cela signifie simplement que vous devez ajouter la bibliothèque SWFOBJECT à la page

$(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");                     
                })
            }
        })
    })


1 commentaires

Joli! J'ai oublié d'utiliser swfobject.js :)