[ad_1]
# Create an E-Commerce product search page clone (Part 1): List ## Problem Statement Given a list of products create a basic HTML page that can render the products as a list of cards. Iterate over the given list to render the item card inside of a parent component identified by `id="root"`. Some basic CSS classes & JavaScript function declarations are provided as a starting point for this assignment. You would have to implement the following functions: ``` createProductCard renderAllCards ``` ## Implementation guidelines: Try to start with the renderAllCards function and inside of it first find the element with `id="root"` using `document.querySelector`. The `renderAllCards` function should take the list of items as an argument (**NOTE**: referring to the global variable inside this function might cause your submission to fail). Once you’ve selected the root element and the list of items as a parameter, now it’s time to iterate through the list to create the individual cards. Call the `createProductCard` function to get back a DOM element which can be appended to the root element as a child. The createProductCard function will accept a parameter of type object with the following structure: ```javascript { "id": 1, "name": "PlayStation 5", "description": "....", "image": "....", "price": 400, "memory": "8 GB", "storage": "1 TB", "colors": ['black', 'white', 'blue'] } ``` You’re expected to return a DOM element i.e. the card component for the given payload. - The card component should be a `div` element having `class=‘product’` and a data attribute called `data-item-id` containing the id of that product item. The card component should have the following: - An IMG element with src attribute containing the image URL and class name as `‘product__image’` - One `H3` element with class `‘product__name’` containing the product name - One P tag containing the product description with class `‘product__description’` - One H4 tag containing the price with class `‘product__price’` Use span tags for other product tags like memory, storage, colors (each). Given as a reference implementation. ## Data Source A global variable called `window.productList` ```javascript window.productList = [ { id: 1, name: 'Playstation 5', image: '....', description: 'Next gen Console gaming', price: '400', memory: '8 GB', storage: '1 TB', color: ['black', 'white', 'blue'], }, { id: 1, name: 'Playstation 4', image: '....', description: 'Previous gen Console gaming', price: '200', memory: '4 GB', storage: '1 TB', color: ['red', 'white', 'blue'], }, { id: 1, name: 'iPhone 12', image: '....', description: 'Smartphone', price: '650', memory: '4 GB', storage: '256 GB', color: ['black', 'white', 'blue', 'red'], }, .... ] ``` ## Expected Output Your submission should look like the following !E-commerce product search page(assets/expected_output.png)
Apa yang saya coba:
Kloning kode untuk proyek ini dengan mengeklik tautan ini[^]
Solusi 1
Meskipun kami sangat bersedia membantu mereka yang mengalami kesulitan, bukan berarti kami ada di sini untuk melakukan semuanya untuk Anda! Kami tidak dapat melakukan semua pekerjaan, Anda dibayar untuk ini, atau itu bagian dari nilai Anda dan sama sekali tidak adil bagi kami untuk melakukan semuanya untuk Anda.
Jadi kami membutuhkan Anda untuk melakukan pekerjaan itu, dan kami akan membantu Anda ketika Anda mengalami kebuntuan. Itu tidak berarti kami akan memberi Anda solusi langkah demi langkah yang bisa Anda berikan!
Mulailah dengan menjelaskan di mana Anda berada saat ini, dan apa langkah selanjutnya dalam proses tersebut. Kemudian beritahu kami apa yang telah Anda coba agar langkah berikutnya berhasil, dan apa yang terjadi ketika Anda berhasil.
Jika Anda mengalami masalah saat memulai, ini mungkin bisa membantu: Cara Menulis Kode untuk Memecahkan Masalah, Panduan Pemula[^]
Solusi 2
Ini adalah kode yang benar untuk mengimplementasikan fungsi JavaScript untuk menampilkan halaman dengan benar. Itu melewati semua kasus uji.
// Creates a product card function createProductCard(product) { // Create a div element const card = document.createElement('div'); // add class product to card div element card.className = 'product'; // add an attribute of name data-id and value product id card.setAttribute('data-id', product.id); // create h3 element const title = document.createElement('h3'); // set its inner text as product name title.innerText = product.name; // set its class name as product__name title.className = 'product__name'; // Create an image element const image = document.createElement('img'); // Set its src attribute image.src = product.image; // Set its class name as 'product__image' image.className = 'product__image'; // Create a p element for description const description = document.createElement('p'); // Set its inner text description.innerText = product.description; // Set its className as 'product__description' description.className = 'product__description'; // create a span element for price const price = document.createElement('span'); // set its text as product's price // Using toLocaleString for comma separated representation price.innerText = product.price.toLocaleString(); // Set class name as 'product__price'; price.className = 'product__price'; // Create a div for tags & set its className as 'product__tags' const tags = document.createElement('div'); tags.className = 'product__tags'; // Iterate over product colors array & render each color product.colors.forEach((color) => { // Create a span element for specific color const elem = document.createElement('span'); // Set its className as 'product__tag'; elem.className = 'product__tag'; // Set an attribute data-tag-color with value color elem.setAttribute('data-tag-color', color); // Set its inner Text as color elem.innerText = color; // Append that to parent tags element tags.appendChild(elem); }); // Render the card in the given order i.e. iterate over them & append them as a child one by one [image, title, description, price, tags].forEach(element => card.appendChild(element)); // return the card return card; } // Load the list function renderAllCards(cardList) { // First select the root element const renderRoot = document.getElementById('root'); // actual ID of the root element // First remove existing children so that we don't append to the existing list. DO NOT remove this renderRoot.innerHTML = ''; // Now iterate over the list passed as a param to render all the cards cardList.forEach((product) => { // Create a card element by calling createProductCard method, passing the list item as a parameter const card = createProductCard(product); // Append that child renderRoot.appendChild(card); }); }
[ad_2]
コメント