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

JavaScript Discussion :

Ajouter un fichier CSS à un DOM


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2022
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Ajouter un fichier CSS à un DOM
    Bonjour,

    Je suis en train de faire une application avec les caractéristiques suivantes:
    - page statique
    - pas de serveur (donc pas de PHP, AJAX)

    Le but de mon application est de sortir au format texte une page web.
    J'ai créé un DOM autre que celui de la page active.

    Je voudrais rajouter un fichier CSS à ce DOM.

    J'ai codé un addCharset qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function addCharset(dest, text)
    {
        sendInfo("addCharset");
     
        let obj = doc.createElement("meta");
        obj.setAttribute("charset", text);
     
        dest.appendChild(obj);
    }
    Je voudrais faire la même chose avec un CSS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function addCSS(dest, text)
    {
        logger("addCSS");
        logger(dest); // dest est un XMLDocument
        logger(text); // text est style.css
     
        let obj = dest.createElement("link");
        obj.setAttribute("rel", "stylesheet");
        obj.setAttribute("href", text);
        logger(obj);
     
        ********************
    }
    Que dois-je mettre à la place des '*' pour que ça fonctionne ?

    Merci,
    Cordialement,

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 408
    Points : 15 775
    Points
    15 775
    Par défaut
    avez-vous essayé avec "appendChild" ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2022
    Messages : 5
    Points : 3
    Points
    3
    Par défaut appendChild testé
    Bonjour,

    Oui, lorsque je met appendChild, j'ai l'erreur suivante:

    Uncaught DOMException: Node.appendChild: Cannot have more than one Element child of a Document.
    Le DOM ressemble alors à la pièce jointe.

    Merci,
    Cordialement,
    Images attachées Images attachées  

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2022
    Messages : 5
    Points : 3
    Points
    3
    Par défaut J'ai trouvé une solution
    Salut,

    Merci de m'avoir mis sur la piste de l'appendChild. Je l'avais essayé, mais comme il ne marchait pas, j'avais essayé plein d'autres trucs.
    Mais en revenant sur l'appendChild, j'ai fini par trouver...
    Pour l'instant, c'est pas très joli, mais je vais essayer d'améliorer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function addCSS(dest, text)
    {
        sendInfo("addCSS");
        logger(dest); // dest est un XMLDocument
        sendInfo(text); // text est style.css
     
        let obj = dest.createElement("link");
        obj.setAttribute("rel", "stylesheet");
        obj.setAttribute("href", text);
        // sendObj(obj);
     
        dest.childNodes[0].childNodes[0].appendChild(obj);
    }
    Le premier 'childNodes[0]' est la balise 'html'.
    Le deuxième 'childNodes[0]' est la balise 'head'.

    Avant, c'est comme si je voulais ajouter une deuxième balise 'html'.

    Ce qui est étonnant, c'est que je n'avais pas le problème avec le charset, ça m'a mis sur une mauvaise piste...

    Merci encore,
    Cordialement,

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 408
    Points : 15 775
    Points
    15 775
    Par défaut
    qu'utilisez vous pour générer l'objet "xmldocument" et pour récupérer ensuite le résultat ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2022
    Messages : 5
    Points : 3
    Points
    3
    Par défaut récupération document
    Salut,

    J'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc = document.implementation.createDocument(null, lang, null);
    et c'est ce 'doc' que j'utilise comme paramètre à addCSS.

    Cordialement,

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 106
    Points : 44 916
    Points
    44 916
    Par défaut
    Bonjour,
    tu peux aussi faire cela simplement en créant une balise <style> que tu renseignes avec le code de ton CSS via un textContent et tu ajoutes celle-ci au <head> du document.

    En gros :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const oStyle = document.createElement("STYLE");
    oStyle.textContent = tonTextCSS;
    document.querySelector("head").appendChild(oStyle);

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2022
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2022
    Messages : 5
    Points : 3
    Points
    3
    Par défaut rep
    Salut,

    A cette étape, je ne connais pas le contenu du fichier CSS.
    Je ne peux donc remplir la balise style...

    Mais j'ai quand même utilisé une partie de ta réponse.

    Merci.

    Finalement, j'ai fait comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function addCSS(doc, dest, filename)
    {
        sendInfo("addCSS");
        logger(doc); // doc est un XMLDocument
        logger(dest); // dest est un l'élément destinataire
        logger(filename); // filename est "style.css"
     
        let obj = doc.createElement("link");
        obj.setAttribute("rel", "stylesheet");
        obj.setAttribute("href", filename);
        // sendObj(obj);
     
        dest.appendChild(obj);
    }
    Et ça pas testé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    function addHeadCSS(doc, filename)
    {
        sendInfo("addHeadCSS");
        logger(doc); // doc est un XMLDocument
        logger(filename); // filename est "style.css"
     
        addCSS(doc, doc.querySelector("head"), filename);
    }
     
    function addStyle(doc, dest, text)
    {
        sendInfo("addStyle");
        logger(doc); // doc est un XMLDocument
        logger(dest); // dest est un l'élément destinataire
        logger(text); // text est style.css
     
        let obj = doc.createElement("style");
        obj.textContent = text;
        // sendObj(obj);
     
        dest.appendChild(obj);
    }
    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Ajouter un fichier XML dans DOM
    Par Flam dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 16/10/2009, 12h20
  2. [DOM] Ajout sur un fichier xml avec DOM
    Par karimoscapitated dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 30/12/2008, 22h34
  3. Réponses: 6
    Dernier message: 04/06/2008, 10h48
  4. [DOM] [XSL] Convertir un fichier XML vers un fichier CSS
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/03/2007, 10h49
  5. ajout evenements dans le fichier CSS
    Par cosminutza dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 20/11/2004, 14h50

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