L'accès à DOM à l'aide de node.js
je veux accéder à un fichier html et obtenir un élément d'id à l'aide de node.js c'est mon fichier html :
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Diagram </title>
<script>
function generatePNG (oViewer) {
//some other code
reader.onloadend = function() {
base64data = reader.result;
var image = document.createElement('img');
image.setAttribute("id", "GraphImage");
image.src = base64data;
document.body.appendChild(image);
}
}, "image/png", oImageOptions);
return sResult;
var sResult = generatePNG (oEditor.viewer);
});
</script>
</head>
<body >
<div id="diagramContainer"></div>
</body>
</html>
Je veux faire obtenir document.getElementById("GraphImage").src
mais avec node.js.
J'ai trouvé que je peux utiliser cheerio
ou jsdom
pour accéder au DOM
avec node.js donc j'ai essayé ce code avec cheerio
:
var cheerio = require('cheerio'),
$ = cheerio.load('file.html');
Mais je n'ai pas founnd l'instruction qui me permettent d'obtenir la image.src
à partir du fichier html, comme cette instruction: document.getElementById("GraphImage").src
cheerio est un coupé de mise en œuvre de jQuery pas le W3C API DOM. Il n'a pas
donc je ne peut pas accéder à DOM à l'aide de plus? que dois-je faire pour accéder à dom à l'aide de node.js?
Vous pouvez obtenir l'accès à la cathédrale, juste à l'aide de l'API jQuery et pas le W3C API DOM. Si vous souhaitez que le W3C DOM API recherchez une bibliothèque qui implémente.
getElementById
. Aller et d'apprendre jQuery si vous souhaitez utiliser ses méthodes pour marcher à travers un DOM.donc je ne peut pas accéder à DOM à l'aide de plus? que dois-je faire pour accéder à dom à l'aide de node.js?
Vous pouvez obtenir l'accès à la cathédrale, juste à l'aide de l'API jQuery et pas le W3C API DOM. Si vous souhaitez que le W3C DOM API recherchez une bibliothèque qui implémente.
OriginalL'auteur ameni | 2015-12-14
Vous devez vous connecter pour publier un commentaire.
cheerio.load()
accepte une chaîne de caractères comme argument. En définissant:cheerio.load('file.html')
cheerio va essayer de mettre en œuvreDOM
de la chaînefile.html
. Évidemment, ce n'est pas ce que vous voulez.Vous devriez obtenir le
html
de données à partir de votre fichier d'abord, puis la passer à lacheerio
. Aussi comme @Quentin dessus décrite, cheerio est un coupé de mise en œuvre de jQuery, vous devez utiliser des sélecteurs jQuery pour obtenir un ceratin élément. Pour votre cas particulier, il serait:$("#GraphImage")
. Voici comment votre code devrait ressembler à:EDIT:
Aussi, dans le fichier html que vous avez fournis, vous ajoutez des objets du DOM avec l'aide de javascript. Si vous voulez y accéder sur le serveur, le javascript doit être interprété. Vous pouvez utiliser quelque chose comme
phantomjs
pour l'atteindre, mais les choses deviennent beaucoup plus compliquées.L'un, moment. J'ai oublié qu'il a été ajouté par javascript.
je ne devrais pas utiliser phantomjs, est-il une autre solution ?
Je ne le pense pas. Pourquoi avez-vous besoin d'accéder à dom sur le serveur?
j'ai besoin d'extraire l'élément "GraphImage" dans le DOM, je suis en train d'essayer avec node.js parce que je peux que faire de browserify à mon node.js script et obtenir un pur code javascript et c'est la que je veux, il n'y a aucune autre solution pour accéder au dom avec javascript?
OriginalL'auteur Alexandr Lazarev
Il ressemble à votre mélange de client et de serveur de site javascript.
mais pour répondre à votre question, vous pouvez accéder à la src de la manière suivante:
assurez-vous que vous devez d'abord charger votre fichier html avec
fs
//EDIT: Votre sont arriver 'undefined' parce que la balise img est dynamiquement gernerated et ne sont pas présents au moment de votre chargez le fichier avec nœud sur le serveur. C'est ce que je ment votre mélange les codes du client avec le serveur de code côté.
Vous pourriez vouloir prendre le diagramContainer
$('#diagramContainer')
et ajouter une balise d'image à l'intérieur et permet de définir la source.$('#diagramContainer').prepend('<img id="theImg" src="theImg.png" />')
Si vous disposez d'un chemin, vous pouvez définir directement si vous générez le format png sur le serveur de disposer d'un flux binaire les choses peuvent devenir plus compliqué.
je viens de commencer et je ne comprends pas ce que tu veux dire
OriginalL'auteur silverfighter