Si vous voulez rendre le htmlString, ne concattez pas les variables dans les chaînes de caractères :
"<div class='crappy way'>"+ variable +"</div>"
Rendre htmlString avec les littéraux du modèle et interpoler les variables :
`<div class='better way'>${variable}</div>`
// A array to reference the root of SWAPI
const roots = ["Film", "People", "Planet", "Species", "Starship", "Vehicle"];
// A one time addition to DOM
const root = `
<article class='${roots[4].toLowerCase()}s'>
<header class='page'>
<h2>${roots[4]}s</h2>
</header>
</article>`;
//Since an example of item wasn't provided, I guessed as to how it was structured.
const items = [{
name: "Death Star",
model: "DS-1 Orbital Battle Station",
films: ["https://swapi.co/api/films/1/"]
}, {
name: "TIE Advanced x1",
model: "Twin Ion Engine Advanced x1",
films: ["https://swapi.co/api/films/1/"]
}, {
name: "X-wing",
model: "T-65 X-wing",
films: ["https://swapi.co/api/films/2/", "https://swapi.co/api/films/3/", "https://swapi.co/api/films/1/"]
}];
// Reference main
const main = document.querySelector('main');
// Render htmlString root
main.insertAdjacentHTML('beforeend', root);
// Reference the new article tag
const article = document.querySelector(`.${roots[4].toLowerCase()}s`);
//A Iterate through each object of the items array
//B Get the count of films array
//C1 if the count is more than 2...
//C2 .films should be rendered with an icon
//C3 else htmlString is without icon
//D htmlString for item
//E Render htmlStrings from C2-3 and D
for (let item of items) {//A
let totalFilms = item.films.length;//B
let films = totalFilms > 2 ? `<dd class='films'>Film Appearances: ${totalFilms} <i class='fas fa-medal'></i></dd>` : `<dd class='films'>Film Appearances: ${totalFilms}</dd>`;//C1-3
let ship = `
<dl class='item'>
<dt class='name'>Starship Name: ${item.name}</dt>
<dd class='model'>Starship Model: ${item.model}</dd>
${films}
</dl>
<hr>`;//D
article.insertAdjacentHTML('beforeend', ship);//E
}
:root {font: 400 3vw/1.5 'Nova Square'}
dt, dd {
margin-inline-start: 0px;
margin-bottom: 4px;
}
<link href="https://fonts.googleapis.com/css?family=Nova+Square&display=swap" rel="stylesheet">
<link href="https://use.fontawesome.com/releases/v5.9.0/css/all.css" rel="stylesheet" crossorigin="anonymous">
<header class='site'>
<h1>Star Wars</h1>
</header>
<main></main>
3 votes
Les identifiants doivent être uniques dans une page HTML ... il est évident que vous en aurez plus d'un.
id="films"
ce qui rend votre HTML invalide ... cela dit, vous pourrez toujours obtenir le premier0 votes
Vous pouvez mettre à jour votre identifiant avec l'index fourni par
forEach
. Si vous devez garderfilms
puis le définir commename
oclass
et l'index commedata-id
0 votes
@JaromandaX Merci de me le rappeler !
0 votes
Merci à tous pour leur aide, voici un lien vers la page finie - star-wars-api-com.stackstaging.com Il s'agissait d'un test technique pour un nouveau poste.