今天是第十三天我們可以寫一個javascript比價網站網頁程式管理系統,以下是我的程式碼
前端技術:
後端技術:
以下是構建一個基本的比價網站的步驟:
使用 HTML 設置網頁的基本結構,包括商品列表、搜尋欄位、比價結果等。
<!DOCTYPE html>
<html lang="zh-TW">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>比價網站管理系統</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <h1>比價管理系統</h1>
    <div>
        <input type="text" id="search" placeholder="輸入商品名稱">
        <button onclick="searchProduct()">搜尋</button>
    </div>
    <div id="results"></div>
    <script src="app.js"></script>
</body>
</html>
設置簡單的樣式。
body {
    font-family: Arial, sans-serif;
    background-color: #f4f4f4;
    padding: 20px;
}
h1 {
    text-align: center;
}
#search {
    width: 300px;
    padding: 10px;
    margin-right: 10px;
}
button {
    padding: 10px;
}
#results {
    margin-top: 20px;
}
負責處理搜尋功能和顯示結果。
// 模擬資料庫的商品價格資料
const products = [
    { name: "iPhone 14", prices: [29900, 30500, 29800] },
    { name: "MacBook Pro", prices: [60000, 59000, 61000] },
    { name: "AirPods Pro", prices: [8000, 8200, 7800] }
];
// 搜尋產品並顯示比價結果
function searchProduct() {
    const searchTerm = document.getElementById('search').value.toLowerCase();
    const resultDiv = document.getElementById('results');
    resultDiv.innerHTML = '';  // 清除先前的搜尋結果
    const filteredProducts = products.filter(product => 
        product.name.toLowerCase().includes(searchTerm)
    );
    if (filteredProducts.length > 0) {
        filteredProducts.forEach(product => {
            const minPrice = Math.min(...product.prices);
            const maxPrice = Math.max(...product.prices);
            resultDiv.innerHTML += `
                <div>
                    <h2>${product.name}</h2>
                    <p>最低價:NT$${minPrice}</p>
                    <p>最高價:NT$${maxPrice}</p>
                </div>
            `;
        });
    } else {
        resultDiv.innerHTML = `<p>找不到商品。</p>`;
    }
}
如果你需要將資料庫資料與伺服器互動,你可以在 Node.js 中建立 API 來存取或更新產品價格。
const express = require('express');
const app = express();
const cors = require('cors');
// 啟用 CORS 允許跨域請求
app.use(cors());
const products = [
    { name: "iPhone 14", prices: [29900, 30500, 29800] },
    { name: "MacBook Pro", prices: [60000, 59000, 61000] },
    { name: "AirPods Pro", prices: [8000, 8200, 7800] }
];
// 搜尋產品 API
app.get('/search', (req, res) => {
    const searchTerm = req.query.q.toLowerCase();
    const filteredProducts = products.filter(product => 
        product.name.toLowerCase().includes(searchTerm)
    );
    res.json(filteredProducts);
});
// 伺服器監聽
app.listen(3000, () => {
    console.log('Server running on port 3000');
});
前端可以透過 AJAX 請求來與後端互動:
function searchProduct() {
    const searchTerm = document.getElementById('search').value;
    fetch(`http://localhost:3000/search?q=${searchTerm}`)
        .then(response => response.json())
        .then(data => {
            const resultDiv = document.getElementById('results');
            resultDiv.innerHTML = '';  // 清除先前的搜尋結果
            if (data.length > 0) {
                data.forEach(product => {
                    const minPrice = Math.min(...product.prices);
                    const maxPrice = Math.max(...product.prices);
                    resultDiv.innerHTML += `
                        <div>
                            <h2>${product.name}</h2>
                            <p>最低價:NT$${minPrice}</p>
                            <p>最高價:NT$${maxPrice}</p>
                        </div>
                    `;
                });
            } else {
                resultDiv.innerHTML = `<p>找不到商品。</p>`;
            }
        });
}
我會以介紹javascript程式碼為主
// 模擬資料庫的商品價格資料
const products = [
    { name: "iPhone 14", prices: [29900, 30500, 29800] },
    { name: "MacBook Pro", prices: [60000, 59000, 61000] },
    { name: "AirPods Pro", prices: [8000, 8200, 7800] }
];
這段代碼定義了一個名為 products 的常量(使用 const),它是一個商品列表,使用 JavaScript 的陣列來儲存多個商品物件,每個商品物件包括兩個屬性:
name: 商品名稱(如 "iPhone 14")prices: 一個陣列,包含該商品在不同商店的價格(如 [29900, 30500, 29800])這樣的資料結構模擬了一個商品價格的簡單資料庫,允許我們在網頁中展示每個商品的價格範圍。
// 搜尋產品並顯示比價結果
function searchProduct() {
    const searchTerm = document.getElementById('search').value.toLowerCase();
    const resultDiv = document.getElementById('results');
    resultDiv.innerHTML = '';  // 清除先前的搜尋結果
這段代碼定義了一個名為 searchProduct 的函數,當使用者點擊搜尋按鈕時會被觸發。以下是這段代碼的作用:
document.getElementById('search').value:這行代碼取得搜尋框中輸入的內容,並將其轉換為小寫(toLowerCase())以進行不區分大小寫的搜尋。document.getElementById('results'):取得 results 的 div,這個 div 用來顯示搜尋結果。resultDiv.innerHTML = '':清空之前的搜尋結果,避免多次搜尋時結果累積。    const filteredProducts = products.filter(product => 
        product.name.toLowerCase().includes(searchTerm)
    );
這段代碼使用 Array.prototype.filter() 方法來篩選出符合搜尋條件的商品:
products.filter():遍歷 products 陣列中的每個商品。product.name.toLowerCase().includes(searchTerm):將每個商品的名稱轉換成小寫,並使用 includes 方法檢查是否包含搜尋的關鍵字。filteredProducts 會包含所有符合搜尋條件的商品。    if (filteredProducts.length > 0) {
        filteredProducts.forEach(product => {
            const minPrice = Math.min(...product.prices);
            const maxPrice = Math.max(...product.prices);
            resultDiv.innerHTML += `
                <div>
                    <h2>${product.name}</h2>
                    <p>最低價:NT$${minPrice}</p>
                    <p>最高價:NT$${maxPrice}</p>
                </div>
            `;
        });
    } else {
        resultDiv.innerHTML = `<p>找不到商品。</p>`;
    }
}
filteredProducts.length > 0:這段代碼檢查是否有篩選到符合條件的商品,若有,則會開始顯示結果。
filteredProducts.forEach(product => { ... }):遍歷篩選出的商品,對每個商品顯示結果。
Math.min(...product.prices):使用 Math.min() 函數來找出該商品的最低價格。...product.prices 是擴展運算符(spread operator),用來將 prices 陣列的每個元素展開作為獨立參數傳給 Math.min。
Math.max(...product.prices):類似地,使用 Math.max() 來找出商品的最高價格。
然後使用模板字串 `${}` 來生成 HTML 字符串並插入到 results div 裡,顯示每個商品的名稱和對應的價格範圍。
如果沒有找到商品,則顯示「找不到商品」的訊息。
products 是商品的資料庫,其中包含商品名稱和不同價格。searchProduct() 函數會根據使用者的輸入搜尋商品,篩選出符合搜尋條件的商品。Math.min() 和 Math.max() 找出每個商品的最低和最高價格。