IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Replace impossible sur jquery


Sujet :

jQuery

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Replace impossible sur jquery
    Bonjour,

    Le but de mon script est de récupérer tous les liens img > data-src et de remplacer /img/image01.jpg en /img/mobile/01.jpg quand la taille d'écran est inférieur à 720px width.

    ce code marche j'ai bien la liste des liens dans la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('img').each(function(){
          test = $(this).attr('data-src');
          console.log(test);
        });
    mais si je met replace ca ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this).attr('data-src').replace("img/","img/mobile/");
    Uncaught TypeError: Cannot read property 'replace' of undefined
    at HTMLImageElement.<anonymous> (monscript.js:11)
    at Function.each (jquery.min.js:2)
    at r.fn.init.each (jquery.min.js:2)
    at HTMLDocument.<anonymous> (monscript.js:10)
    at j (jquery.min.js:2)
    at k (jquery.min.js:2)

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    on peut voir le html de ta balise image ?

    si elle on réellement un data-src ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(this).data( 'src',  $(this).data('src').replace("jpg","png") );
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    merci pour la reponse, Bah bien sur vu qu'il me les affichent dans la console.

    Dans mon index j'ai des img sans src juste des data-src qui servent pour lazyload. Mais osef.

    Ton code fait la même erreur, replace n'est pas reconnu. Jai vu sur d'autres forum qu'il faut rajouter val() partout.. ca ne fait plus d'erreur mais rien ne marche.

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 664
    Points
    66 664
    Billets dans le blog
    1
    Par défaut
    L'erreur n'est pas dans le replace ...
    Mais dans le fait que l'objet sur lequel tu essayes de l'appliquer n'existe pas .

    Il va falloir nous montrer un peu plus de code en situation
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Je ne vois pas ce que je peux montrer de +,

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/lightbox.min.js"></script>
    <script type="text/javascript" src="js/jquery.unveil.js"></script>

    monscript.js est dans le footer, donc après le body, et après tous les scripts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $( document).ready(function() {
     
        $('img').each(function(){
          test = $(this).attr('data-src');
          console.log(test);
        });
    La console m'affiche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    img/conseil.jpg
    etc
    etc
    et le index.php contient des :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <img alt="" data-src="img/conseil.jpg"/>

  6. #6
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 969
    Points : 44 129
    Points
    44 129
    Par défaut
    Bonjour,
    quand on utilise ce sélecteur $('img') TOUTES les balises <img> sont récupérées même celles qui non pas de data-src donc cela peut planter.

    Il serait donc plus judicieux de faire un requête du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $("img[data-src]").each(function(){
      test = $(this).attr("data-src");
      console.log(test);
    });
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $('img[data-src]').each(function(){
      test = $(this).data('src');
      console.log(test);
    });

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    oui en effet j'avais ça avant, pas fait gaffe. Ah force de supprimer et recommencer mon code.
    Mais ça ne résous pas mon problème malheureusement

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 969
    Points : 44 129
    Points
    44 129
    Par défaut
    En quoi cela ne résout pas ton problème ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $('img[data-src]').each(function(){
      $(this).data( 'src',  $(this).data('src').replace("img/","img/mobile/"));
      test = $(this).data('src');
      console.log(test);
    });

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Ah d'accord tu mets data(), je mettais val() ou attr().

    Donc la ça marche merci mais seulement dans le console.log comment on l'applique sur les images ? ?

    et donc ? je n'arrive pas a remplacer les data-src

    [Modération] Inutile de citer un message pour y répondre, il existe un bouton répondre à la discussion.

  10. #10
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 969
    Points : 44 129
    Points
    44 129
    Par défaut
    Ah d'accord tu mets data(), je mettais val() ou attr().
    cela fonctionne très bien également avec attr()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $('img[data-src]').each(function(){
      $(this).attr( 'data-src',  $(this).attr('data-src').replace("img/","img/mobile/") );
      test = $(this).attr('data-src');
      console.log(test);
    });
    ne sachant pas trop ce que tu souhaites faire au final, je dirais changer la src de l'<img>, il faut procéder par ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $('img[data-src]').each(function(){
      // récupération de data-src
      var dataSrc = $(this).attr( 'data-src');  // data fait également l'affaire
      // opération de remplacement
      dataSrc = dataSrc.replace("img/","img/mobile/");
      // injection dans src de l'<img>
      $(this).attr('src', dataSrc);             // ici on cible l'attribut src
    });

  11. #11
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    mmmm bizarre ça ne fonctionne pas.. ou du moins ca marche seulement dans la console.

    Ce que je veux faire est simple. quand on est en écran inférieur à 720px toutes les url data-src et donc les src (puisque chrome duplique les data-src en src aussi) sont remplacer avec /mobile/.

    le but est de charger des images basses qualités sur mobile. C'est tout

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2018
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Avril 2018
    Messages : 537
    Points : 634
    Points
    634
    Par défaut
    Bonsoir, ça devrait résoudre ton problème !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $(document).ready(function() {
        if(window.innerWidth < 720 || window.innerHeight < 720) {
     
            var img = $('img[data-src]');
            var src = img.src.replace('img/','img/mobile/');
            var datasrc = img.data('src').replace('img/','img/mobile/');
     
            img.attr('src', src);
            img.attr('data-src', datasrc);
        }
    });
    Quelle version de jQuery utilises-tu ?

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Sorry pour le retard. Et merci pour le code

    Mais nan ça ne marche pas :

    "jQuery.Deferred exception: Cannot read property 'replace' of undefined TypeError: Cannot read property 'replace' of undefined"

    Il ne comprend toujours pas replace.



    je suis en jquery 3.3.1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript" src="js/lightbox.js"></script>
    <script type="text/javascript" src="js/jquery.unveil.js"></script>
    <script type="text/javascript" src="js/monscript.js"></script>

  14. #14
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 969
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 969
    Points : 44 129
    Points
    44 129
    Par défaut
    Mais nan ça ne marche pas :
    nous voilà bien avancé

    Qu'est ce que tu as essayé ce bout de code ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var img = $('img[data-src]');
    var src = img.src.replace('img/','img/mobile/');
    ... normal $() renvoie une collection d''objets jQuery qui ne possèdent pas de méthodes replace().
    Reprend le code que je t'ai donné.

    Nota : si c'est pour ajuster les images au média alors tu pourrais le faire en HTML5 avec <img srcset...>.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Pas compris. srcset je connais pas, on peut charger une autres images en width720px ??
    ou alors ça reprend la même image et la réduit ?
    SI oui je me prends vraiment la tête pour rien la

    EDIT : je viens de lire la doc, en effet...j'ai perdu du temps pour rien visiblement XD

    EDIT 2 : ouai mais vu que j'ai des data-src ca ne fonctionne pas avec srcset, donc faire un petit script au lieu de modifier tout le html ca m'arrangerait ^^

    tu peux m'aider à le faire marcher le code ?

Discussions similaires

  1. Réponses: 9
    Dernier message: 29/04/2006, 13h15
  2. fonction impossible sur form créée a la volée :s
    Par avogadro dans le forum Débuter
    Réponses: 4
    Dernier message: 06/04/2006, 22h37
  3. RenameFile impossible sur un répertoire
    Par Statman dans le forum Langage
    Réponses: 2
    Dernier message: 21/03/2006, 00h16
  4. [WebForms][1.1] Clic impossible sur les liens
    Par Big_Ben68 dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 09/01/2006, 16h34
  5. Réponses: 10
    Dernier message: 21/11/2005, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo