首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

原生js实现商品筛选

原生JavaScript实现商品筛选功能主要涉及DOM操作、事件监听和数据过滤等基础概念。以下是详细解答:

基础概念

  1. DOM操作:Document Object Model(文档对象模型),允许JavaScript与HTML文档进行交互。
  2. 事件监听:通过监听用户的操作(如点击、输入等)来触发相应的函数。
  3. 数据过滤:根据用户的选择或输入条件,对商品数据进行筛选。

优势

  • 性能:原生JavaScript执行速度快,不需要加载额外的库或框架。
  • 灵活性:可以根据具体需求定制筛选逻辑,不受第三方库的限制。
  • 学习价值:有助于深入理解前端开发的核心原理。

类型

  • 基于属性筛选:如价格区间、品牌、类别等。
  • 基于搜索关键词:用户输入关键词进行模糊匹配。
  • 多条件组合筛选:同时应用多个筛选条件。

应用场景

  • 电商网站:商品列表页的筛选功能。
  • 二手交易平台:根据新旧程度、价格等进行筛选。
  • 招聘网站:根据职位、地点、薪资等筛选职位信息。

示例代码

以下是一个简单的商品筛选示例,包含价格区间和品牌两个筛选条件:

代码语言:txt
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>商品筛选</title>
</head>
<body>
    <div>
        <label for="minPrice">最低价格:</label>
        <input type="number" id="minPrice">
    </div>
    <div>
        <label for="maxPrice">最高价格:</label>
        <input type="number" id="maxPrice">
    </div>
    <div>
        <label for="brand">品牌:</label>
        <select id="brand">
            <option value="">全部</option>
            <option value="Apple">Apple</option>
            <option value="Samsung">Samsung</option>
            <option value="Sony">Sony</option>
        </select>
    </div>
    <ul id="productList">
        <!-- 商品列表将通过JavaScript动态生成 -->
    </ul>

    <script>
        const products = [
            { name: 'iPhone 12', brand: 'Apple', price: 699 },
            { name: 'Galaxy S21', brand: 'Samsung', price: 799 },
            { name: 'Xperia 1 III', brand: 'Sony', price: 1199 },
            // 更多商品...
        ];

        function renderProducts(filteredProducts) {
            const productList = document.getElementById('productList');
            productList.innerHTML = '';
            filteredProducts.forEach(product => {
                const li = document.createElement('li');
                li.textContent = `${product.name} - ${product.brand} - $${product.price}`;
                productList.appendChild(li);
            });
        }

        function filterProducts() {
            const minPrice = parseFloat(document.getElementById('minPrice').value) || 0;
            const maxPrice = parseFloat(document.getElementById('maxPrice').value) || Infinity;
            const brand = document.getElementById('brand').value;

            const filteredProducts = products.filter(product => {
                return product.price >= minPrice && product.price <= maxPrice &&
                       (brand === '' || product.brand === brand);
            });

            renderProducts(filteredProducts);
        }

        document.getElementById('minPrice').addEventListener('input', filterProducts);
        document.getElementById('maxPrice').addEventListener('input', filterProducts);
        document.getElementById('brand').addEventListener('change', filterProducts);

        // 初始渲染
        renderProducts(products);
    </script>
</body>
</html>

可能遇到的问题及解决方法

  1. 筛选条件不生效
    • 原因:可能是事件监听未正确设置或筛选逻辑有误。
    • 解决方法:检查事件监听器是否正确绑定到相应的DOM元素,并确保筛选逻辑无误。
  • 性能问题
    • 原因:当商品数据量很大时,频繁操作DOM可能导致页面卡顿。
    • 解决方法:使用虚拟列表技术只渲染可见部分的商品,减少DOM操作次数。
  • 输入验证缺失
    • 原因:用户可能输入非法值(如负数价格),导致筛选结果异常。
    • 解决方法:增加输入验证,确保输入值在合理范围内。

通过以上步骤和示例代码,可以实现一个基本的原生JavaScript商品筛选功能,并解决常见的实现问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 在线商城项目12-商品列表页价格筛选实现

    简介 本篇主要目的如下: 实现商品列表页的后端价格筛选逻辑 前后端联调价格筛选逻辑 1. 实现商品列表页的后端价格筛选逻辑 之前我们约定前端传startPrice和endPrice来获取价格区间。...我们设定如下规则: 如果startPrice未传,则默认查询起始价为0 如果endPrice未传,则不设置查询结尾价 查询起始价(不包含)到结尾价(包含)区间的商品 修改routes/goods.js文件如下...}}; } else { params = {salePrice: {$gt: startPrice}}; } // 查询起始价(不包含)到结尾价(包含)区间的商品...我看了一下京东,天猫,淘宝,唯品会等商品搜索页面,大部分都只有手动输入价格区间。如果有指定筛选空间的,一般是定价没有小数点的,比如:0-100,101-500,500以上这样。...当然,具体的筛选规则可以根据实际情况来定,这一块主要还是产品经理的职责,开发可以提出建议。实际情况实际处理吧。

    1.3K20

    原生JS实现组件式开发

    自定义标签 自定义标签通过扩展一个HTMLElement或HTMLElement的子类来定义一个新的html标签,是通过原生js实现的组件化。...前面的自定义标签只是定义了自己的一些特别的通用方法,也能插入子元素,已经拥有了组件化的方法,但和复杂的组件相比是完全不够用的,它应该配合另一个特性Shadow DOM一起使用 Shadow DOM能封闭内部,让js.../index.js" type="module"> 复制代码 class RedH1 extends HTMLElement { text; constructor...defineCustomElement来创建一个自定义标签的构造函数,它接收defineComponent相同的参数,返回的类需要使用window.customElements.define来注册,因为是使用原生的方法注册...使用单文件时会打包更多的代码进去,如果只是使用简单的功能组件更推荐使用原生写法 使用场景 如果需要扩展从外部获取的html并添加比较复杂的功能,自定义标签就是个很好的选择,比如我的博客的文章通过markdown

    3.7K52
    领券