J'essaie d'afficher les données de véhicule d'un constructeur de manière dynamique sur une page HTML sous forme de cartes individuelles (chaque carte comprendra une image, une marque, un modèle, une couleur, un numéro d'immatriculation et un prix). Je voudrais pouvoir manipuler chaque point de données individuellement. Par exemple, définir la taille de la police de la marque pour qu'elle soit supérieure, par exemple, au prix.
Je comprends conceptuellement comment cela doit fonctionner, mais mes recherches à ce sujet ont conduit à des solutions ou des solutions basées sur un cadre que je ne comprends pas encore. J'aimerais avoir de l'aide pour comprendre la solution finale si possible et aussi pouvoir l'adapter davantage par moi-même.
Comme indiqué, j'ai essayé de rechercher des problèmes similaires et j'ai trouvé des solutions (dont je ne comprends rien ou qui utilisent exclusivement du JavaScript vanilla).
// Using a constructor to pre-define what data will be included for each
car
function carCreator(make,model,colour,image,registrationNumber,price) {
this.make = make;
this.model = model;
this.colour = colour;
this.image = image;
this.registrationNumber = registrationNumber;
this.price = price;
}
// Adding data to car variables using the constructor function
let volkswagenPolo = new carCreator("Volkswagen","Polo","White","","ND
123 456","R125 000");
let chevroletSpark = new carCreator("Chevrolet","Spark","Black","","ND
654 321","R112 000");
let renaultClio = new carCreator("Renault","Clio","Red","","ND 456
789","R225 000");
let kiaPicanto = new carCreator("Kia","Picanto","Grey","","ND 987
6546","R185 000");
let fordFiesta = new carCreator("Ford","Fiesta","Orange","","ND 123
987","R295 000");
// This is my idea of what I think needs to happen at the next stage in
// order to get each of these vehicles to display.
// - Use JavaScript to create HTML elements for each data point (Make,
// model, colour, etc).
// - Use a forEach loop to iterate through the file until each vehicle has
// had it's own HTML created.
3 Réponses :
En JavaScript, pour ajouter un élément au corps de votre document HTML, procédez comme suit:
p {
display: inline;
margin: 10px;
padding: 10px;
}
.card {
border-style: solid;
border-width: 10px;
border-color: #000000;
padding: 10px;
margin: 10px;
}Pour plus d'informations sur la modification du document HTML à l'aide de JavaScript, consultez: https://www.w3schools.com/js/js_htmldom_document.asp
Modifier: Voici un exemple fonctionnel:
let cars = []; // An Array to store all the cars in so you can use forEach on it
function carCreator(make, model, colour, image, registrationNumber, price) {
this.make = make;
this.model = model;
this.colour = colour;
this.image = image;
this.registrationNumber = registrationNumber;
this.price = price;
cars.push(this);
}
let volkswagenPolo = new carCreator("Volkswagen", "Polo", "White", "", "ND 123 456", "R125 000");
let chevroletSpark = new carCreator("Chevrolet", "Spark", "Black", "", "ND 654 321", "R112 000");
let renaultClio = new carCreator("Renault", "Clio", "Red", "", "ND 456 789", "R225 000");
let kiaPicanto = new carCreator("Kia", "Picanto", "Grey", "", "ND 987 6546", "R185 000");
let fordFiesta = new carCreator("Ford", "Fiesta", "Orange", "", "ND 123 987", "R295 000");
cars.forEach(car => {
let card = document.createElement("div") // creates a div element for the Card
card.className = "card" // Sets the class name so we can style it with CSS
document.body.appendChild(card) // Adds the card to the body
let make = document.createElement("p"); // creates A paragraph element
make.innerText = "Make: " + car.make; // sets the text inside it to "Make: " + the car's make
card.appendChild(make) // adds the element to the card
let model = document.createElement("p"); // creates A paragraph element
model.innerText = "Model: " + car.model; // sets the text inside it to "Model: " + car's model
card.appendChild(model) // adds the element to the card
let colour = document.createElement("p"); //creates A paragraph element
colour.innerText = "Colour: " + car.colour; //sets the text inside it to "Colour: " + the car's colour
card.appendChild(colour) //adds the element to the card
if (car.image) { // checks if the car has an image
let image = document.createElement("img"); //creates A image element
image.src = car.image; //sets the image src car's image (link)
card.appendChild(image) // adds the element to the card
}
let registrationNumber = document.createElement("p"); // creates A paragraph element
registrationNumber.innerText = "Registration Number: " + car.registrationNumber; // sets the text inside it to "Registration Number: " + car's registrationNumber
card.appendChild(registrationNumber) // adds the element to the card
let price = document.createElement("p"); //creates A paragraph element
price.innerHTML = "Price:" + car.price; // sets the text inside it to "Price: " + car's price
card.appendChild(price) //adds the element to the card
})
let myDiv = document.createElememt("div") // creates a div element (could be any element)
document.body.appendChild(myDiv) // appends it to the body of the document
(Le CSS le fait ressembler à une carte)
J'espère que cela aide.
Merci pour le commentaire. C'est là que j'avais commencé à regarder mais j'étais un peu débordé, aussi stupide que cela puisse paraître à admettre. Si vous pouviez m'aider à comprendre, ce serait formidable. Disons que je veux créer une carte comme je l'ai décrit ci-dessus. Est-ce que je créerais un div pour héberger le contenu, puis ajouterais un en-tête à ce div, un paragraphe à cet en-tête pour les autres détails, un autre paragraphe au paragraphe existant, et ainsi de suite jusqu'à ce que tous les détails aient été inclus? Je pense que c'est là que c'est perdu pour moi. Je pourrais créer un élément mais je ne sais pas comment gérer plusieurs éléments et les structurer.
J'ai édité mon message pour ajouter un exemple qui est expliqué avec des commentaires.
Merci pour votre aide. J'ai réussi à faire fonctionner une variante de la vôtre que j'aime vraiment. Très appréciée!
Donc, pour créer dynamiquement un élément HTML, vous pouvez utiliser document.create () pour créer un élément et continuer à y ajouter des éléments enfants en utilisant les méthodes JS habituelles comme document.appendChild ().
Cependant, personnellement , chaque fois que j'ai besoin de créer un contenu dynamique imbriqué compliqué, j'aime définir mon bloc de code réutilisable dans une balise de modèle dans le HTML lui-même.
Par exemple:
<template id="car-card-template">
<section id="car-card-title">
</section>
<section id="car-card-body">
<span class="car-model"></span>
<span class="car-price"></span>
<span class="car-registrationNo"></span>
</section>
</template>`
Merci beaucoup pour la suggestion modélisée. Cela me permet certainement de comprendre beaucoup plus facilement. Pourriez-vous me donner un exemple de la façon dont vous appelleriez ce modèle à partir de votre code JavaScript? Je suppose que vous le référenceriez simplement dans votre boucle forEach avec append?
@weylandswart Vous pouvez accéder au code à l'intérieur du modèle une fois en dehors de la boucle For et l'utiliser plusieurs fois. Cela réduira le nombre d'appels d'accès DOM. var main = document.getElementById ('main'); // le conteneur dans lequel vous allez ajouter let carTemplate = document.getElementById ('car-card-template'); templateHTML = carTemplate.innerHTML; for (let i = 0; i
function carCreator(make, model, colour, image, registrationNumber, price) {
this.make = make;
this.model = model;
this.colour = colour;
this.image = image;
this.registrationNumber = registrationNumber;
this.price = price;
let makeElement = document.createElement("p");
makeElement.innerHTML = this.make;
document.body.appendChild(makeElement)
let modelElement = document.createElement("p");
modelElement.innerHTML = this.model;
document.body.appendChild(modelElement)
let colourElement = document.createElement("p");
colour.innerHTML = this.colour;
document.body.appendChild(colourElement)
let imageElement = document.createElement("p");
imageElement.innerHTML = this.image;
document.body.appendChild(imageElement)
let registrationNumberElement = document.createElement("p");
registrationNumberElement.innerHTML = this.registrationNumber;
document.body.appendChild(registrationNumberElement)
let priceElement = document.createElement("p");
priceElement.innerHTML = this.price;
document.body.appendChild(priceElement)
}
let volkswagenPolo = new carCreator("Volkswagen", "Polo", "White", "", "ND 123 456", "R125 000");
let chevroletSpark = new carCreator("Chevrolet", "Spark", "Black", "", "ND 654 321", "R112 000");
let renaultClio = new carCreator("Renault", "Clio", "Red", "", "ND 456 789", "R225 000");
let kiaPicanto = new carCreator("Kia", "Picanto", "Grey", "", "ND 987 6546", "R185 000");
let fordFiesta = new carCreator("Ford", "Fiesta", "Orange", "", "ND 123 987", "R295 000");
Remplacez le paragraphe par l'élément que vous aimez.
EDIT
Ou faites-le simplement dans la fonction:
let cars = [];
function carCreator(make, model, colour, image, registrationNumber, price) {
this.make = make;
this.model = model;
this.colour = colour;
this.image = image;
this.registrationNumber = registrationNumber;
this.price = price;
cars.push(this);
}
let volkswagenPolo = new carCreator("Volkswagen", "Polo", "White", "", "ND 123 456", "R125 000");
let chevroletSpark = new carCreator("Chevrolet", "Spark", "Black", "", "ND 654 321", "R112 000");
let renaultClio = new carCreator("Renault", "Clio", "Red", "", "ND 456 789", "R225 000");
let kiaPicanto = new carCreator("Kia", "Picanto", "Grey", "", "ND 987 6546", "R185 000");
let fordFiesta = new carCreator("Ford", "Fiesta", "Orange", "", "ND 123 987", "R295 000");
for (let x = 0; x < cars.length; x++) {
let make = document.createElement("p");
make.innerHTML = cars[x].make;
document.body.appendChild(make)
let model = document.createElement("p");
model.innerHTML = cars[x].model;
document.body.appendChild(model)
let colour = document.createElement("p");
colour.innerHTML = cars[x].colour;
document.body.appendChild(colour)
let image = document.createElement("p");
image.innerHTML = cars[x].image;
document.body.appendChild(image)
let registrationNumber = document.createElement("p");
registrationNumber.innerHTML = cars[x].registrationNumber;
document.body.appendChild(registrationNumber)
let price = document.createElement("p");
price.innerHTML = cars[x].price;
document.body.appendChild(price)
}