[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)
我尝试过的:
解决方案1
虽然我们非常愿意帮助那些陷入困境的人,但这并不意味着我们会为您做这一切! 我们无法完成所有工作,您要么为此获得报酬,要么这是您成绩的一部分,我们为您做这一切是不公平的。
所以我们需要你来做这项工作,当你遇到困难时我们会帮助你。 这并不意味着我们会给您一个可以提交的分步解决方案!
首先解释一下您目前所处的位置以及该过程的下一步是什么。 然后告诉我们您为下一步工作所做的努力,以及当您这样做时发生了什么。
如果您在入门时遇到问题,那么这可能会有所帮助: 如何编写代码来解决问题,初学者指南[^]
解决方案2
这是实现 JavaScript 函数以正确显示页面的正确代码。 它通过了所有测试用例。
JavaScript
// 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]
コメント