Est-il possible d'ajouter à Jsdom un fichier html déjà chargé avec un fichier html séparé?

0
praveen 17 avril 2018 à 13:38

3 réponses

Meilleure réponse

Oui, tu peux faire ça. L'approche la plus simple serait de:

  1. Créez votre DOM initial avec jsdom.
  2. Lisez le deuxième fichier HTML dans une chaîne en utilisant fs.
  3. Ajoutez le contenu du deuxième fichier HTML au DOM d'origine renvoyé par jsdom.

Installer

npm install jsdom --save-dev
npm install fs --save-dev

Exemple de code:

var jsdom = require('jsdom').JSDOM;
var fs = require('fs');
var document = (new jsdom('<!DOCTYPE html><html><head></head><body></body></html>')).window.document;
var secondHtml = fs.readFileSync('HelloWorld.html').toString();
document.body.innerHTML = secondHtml;

Notez que votre deuxième code HTML doit exclure les balises <html>, <head> et <body>. Sinon, vous aurez des problèmes avec une balise <body> insérée dans une balise <body> existante.

1
Elliot B. 17 avril 2018 à 23:44

Les autres réponses remplacent le html interne du corps. L'OP veut ajouter :

Dépendances:

npm install jsdom

Solution:

const {JSDOM} = require("jsdom");
const fs      = require("fs");

const appendJSDOM = (dom, htmlFile) => {
    const html = fs.readFileSync(htmlFile).toString();
    dom.window.document.body.insertAdjacentHTML('beforeend', html);
}

JSDOM.fromFile("file1.html")
.then(dom => {
    appendJSDOM(dom ,"file2.html");
    console.log(dom.serialize());
});

Vous pouvez continuer d'appeler appendJSDOM() pour ajouter d'autres fichiers html. Mais comme les autres réponses l'ont dit, vous devez omettre les balises <html>, <head> et <body> dans les fichiers html supplémentaires.

insertAdjacentHTML peut également insérer du HTML à différents endroits en fonction de ce que vous mettez comme premier argument.

1
CSBatchelor 6 mai 2019 à 18:34

Je pense que celui-ci vous aidera.

require('jsdom-global')();
var fs = require('fs');
document = window.document;
var dashboard = 
fs.readFileSync('yourHtmlFile').toString();
document.documentElement.innerHTML  = dashboard;
1
user515 29 juin 2018 à 05:43