HTML Academy
Check yourself
Introduction to JavaScript in the browser18/23
Back to the list of tasks
  • 1. Script to start!
  • 2. Ready or not, here I come
  • 3. First class
  • 4. Find every single one
  • 5. Under cover
  • 6. Temporarily unavailable
  • 7. Special offer
  • 8. Summary of “JavaScript in the browser”. Part 1
  • 9. Twelfth program: “Ice cream test”
  • 10. Be careful, children!
  • 11. Creating a card
  • 12. Describe yourself
  • 13. Don’t repeat yourself
  • 14. Refactor and conquer
  • 15. Adding a picture
  • 16. One more function
  • 17. Check yourself
  • 18. Live data
  • 19. Got it in stock? What if I find one?
  • 20. Special offer
  • 21. Start the conveyor
  • 22. Summary of “JavaScript in the browser”. Part 2
  • 23. Thirteenth program: “Ice cream returns”
Got it in stock? What if I find one?
  • Sign up
  • Log in

Loading…
Everything will be ready in few seconds

  • Theory
  • Theory
  • Comments

Live data

Finally, Muffin sent out an example of data load for one product. It’s not much, but it’s enough to complete working on the createCard function. After all, now all the data in it is static, that is, the same, and no matter how many times we call it, the cards will look like spitting images of each other.

Information about the product is an object, each property of which describes the characteristic of the product. First, we’ll work with these properties:

  • imgUrl is an image address;
  • text is product name;
  • price is price.

In order for the function to return different data in the end, it must receive different input data. Therefore, we first add parameter product to the createCard function and will then transfer the received object with data to it (by the way, it is already inserted in the code, but it was commented out).

Then inside the function, we need to replace the fixed values ​​with the properties of the input parameter. For example:

// Before:
var title = createElement('h2', 'product__title', 'Professional selfie stick');
picture.alt = 'Professional selfie stick';

// After:
var title = createElement('h2', 'product__title', product.text);
picture.alt = product.text;

Comments

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Catalog | Device</title> <link rel="stylesheet" href="device/setting.css"> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="products"> </ul> <script src="script.js"></script> </body> </html>
CSS
.products { display: flex; flex-wrap: wrap; justify-content: space-between; width: 570px; margin: 20px auto; padding: 0; list-style: none; } .product { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; width: 270px; margin-bottom: 30px; } .product__image { order: -1; width: 270px; height: 380px; margin-bottom: 15px; } .product__title { max-width: 180px; margin: 0; font-weight: 500; font-size: 18px; line-height: 24px; } .product__price { max-width: 80px; margin: 0; text-align: right; font-weight: 300; font-size: 16px; line-height: 27px; } .product--special { order: -1; width: 100%; height: 380px; flex-direction: column; justify-content: flex-start; align-content: space-between; } .product--special .product__title { width: 270px; max-width: 100%; margin-bottom: 10px; font-size: 28px; line-height: 36px; } .product--special .product__price { width: 270px; max-width: 100%; text-align: left; text-decoration: line-through; color: #cccccc; } .product--special .product__special-price { margin: 0; } .product--special .product__image { outline: 3px solid #ffc600; } .product--special::before { content: "Product of the day"; position: absolute; top: 0; left: 0; display: flex; justify-content: center; align-items: center; padding: 5px 10px; font-weight: 500; color: #111111; text-transform: uppercase; background-color: #ffc600; } .product--available::after, .product--unavailable::after { position: absolute; top: 343px; left: 50%; padding: 10px 5px 2px 5px; border-bottom: 1px solid #57c74b; transform: translateX(-50%); } .product--available::after { content: "In stock"; } .product--unavailable { filter: grayscale(1) opacity(0.7); } .product--unavailable::after { content: "Out of stock"; } .product--special.product--available::after, .product--special.product--unavailable::after { left: 135px; }
JavaScript
var makeElement = function (tagName, className, text) { var element = document.createElement(tagName); element.classList.add(className); if (text) { element.textContent = text; } return element; }; var createCard = function () { var listItem = makeElement('li', 'product'); var title = makeElement('h2', 'product__title', 'Professional selfie stick'); listItem.appendChild(title); var picture = makeElement('img', 'product__image'); picture.src = 'device/item-4.jpg'; picture.alt = 'Professional selfie stick'; listItem.appendChild(picture); var price = makeElement('p', 'product__price', '1000'); listItem.appendChild(price); return listItem; }; var cardList = document.querySelector('.products'); /* var productInfo = { isAvailable: true, imgUrl: 'device/item-1.jpg', text: 'Selfie stick for beginners', price: 200, isSpecial: false, specialPrice: null }; */ var cardItem = createCard(); cardList.appendChild(cardItem);

What didn’t you like in this task?

Thanks! We’ll fix everything at once!

Click inside the mini browser to put the focus in this window.

100%
Console
Goalscompleted
0
    1. Uncomment the productInfo object.
    2. Add the product parameter to the createCard function declaration, and productInfo to its call.
    3. In the body of the createCard function, replace the 'Professional selfie stick' string with the value of the text property of the product object (for the title and alt).
    4. Replace the image address with the value of the imgUrl property of the product object.
    5. Change the price to the value of the price property of the product object.

    Cookies ∙ Privacy ∙ License Agreement ∙ About ∙ Contacts ∙ © HTML Academy OÜ, 2019−2025

    VISAMastercard

    Log in

    or

    Forgot your password?

    Sign up

    Sign up

    or
    Log in

    Restore access

    Have you forgotten your password or lost access to your profile? Enter your email connected to your profile and we will send you a link to restore access.

    Forgot to connect your email to the profile? Email us and we’ll help.