document not working with template literalls

44 Views Asked by At

I have a script that renders some HTML content and looks like this.

renderJobs = async () => {
const jobs = await getJobs();
const view = `
    ${jobs.map(companyName => `
        <div class="show">
            <div class="company-details">
                <p>${companyName.company}</p>
                <object type="image/svg+xml" data="${companyName.logo}"></object>
                <h3>${companyName.position}</h3>
                <p class="details">${companyName.postedAt} - ${companyName.contract} - ${companyName.location}</p>
            </div>
            <div class="tags">
                <p>${companyName.role}</p>
                ${companyName.languages.map(lang => `
                    <p>${lang}</p>
                `).join('')}
                <p>${companyName.tools}</p>
                <p>${companyName.level}</p>
                
            </div>
        </div>
    `).join('')}
`
return view }

Now, I'm trying to select all of the children on every div with the class tags. So I can later loop through them and render only the cards that have certain content.

Here is the snippet for that:

selector = () => {
const tagName = document.querySelectorAll('.tags').children;
console.log(tagName)}

But it returns undefined, I am not aware if using template literals the rules change for the DOM. I tried the event listener DOMContentLoaded but did not seem to work. Thank you

Full code:

getJobs = async() => {
  try {
    response = await fetch("https://raw.githubusercontent.com/ChrisPrzR/jobs-filtering-app/main/data.json");
    const data = await response.json();
    return data;
  } catch (error) {
    console.log('Error getting data', error)
  }
}

renderJobs = async() => {
  const jobs = await getJobs();
  const view = `
        ${jobs.map(companyName => `
            <div class="show">
                <div class="company-details">
                    <p>${companyName.company}</p>
                    <object type="image/svg+xml" data="${companyName.logo}"></object>
                    <h3>${companyName.position}</h3>
                    <p class="details">${companyName.postedAt} - ${companyName.contract} - ${companyName.location}</p>
                </div>
                <div class="tags">
                    <p>${companyName.role}</p>
                    ${companyName.languages.map(lang => `
                        <p>${lang}</p>
                    `).join('')}
                    <p>${companyName.tools}</p>
                    <p>${companyName.level}</p>
                    
                </div>
            </div>
        `).join('')}
    `
  return view
}


const main = async() => {
  const companies = document.querySelector('.cards')
  companies.innerHTML = await renderJobs()
}

main()

selector = () => {
  const tagName = Array.from(document.querySelectorAll('.tags')).flatMap(el => el.children)
  console.log(tagName)
}

selector()
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div class="cards"></div>
  <script src="./app.js"></script>
</body>

</html>

0

There are 0 best solutions below