【JavaScript 进阶教程】汽车商城根据价格区间筛选车辆案例

news2025/2/24 9:27:30

本案例源码链接(非VIP可私聊获取):https://download.csdn.net/download/weixin_52212950/86286910https://download.csdn.net/download/weixin_52212950/86286910

文章导读:  

         这篇文章实现一个小案例:在购物平台选商品时我们经常会输价格区间,然后筛选出在这个区间内的商品,其实有JavaScript基础我们就已经能实现了,利用循环判断等知识。但是这篇文章是新方法 forEach,filter,some 的使用实现,可以让我们的实现更轻松。

文章目录:

一:效果展示

 二:功能实现分析

2.1 页面渲染数据

2.2 根据价格区间查找

2.3 根据输入结果准确查找

 三:完整代码


一:效果展示

页面基本效果

 根据价格区间搜索

 根据车辆名称搜索


 二:功能实现分析

2.1 页面渲染数据

我们的数据存放格式为数组放对象,在写入大量数据后要将其渲染到页面的主表格中,我们可以使用 forEach 方法来实现,每次迭代都会执行一次基础的创建行,添加行的操作


实现过程:

  • 遍历开始,首先轮到的是数组第一个元素,即第一个车辆的数据,然后创建行tr,给行tr添加内容,内容中直接将车辆信息的编号id,名称name,价格price写入,然后再在tbody内加上创建好的行
  • 再轮到下一个车辆的数据,在创建行等操作,直到所有车辆信息全部添加进去结束
car.forEach(function(value,index,arr){
            var tr=document.createElement('tr');
            tr.innerHTML='<td>'+value.id+'</td><td>'+value.name+'</td><td>'+value.price+'</td>'
            tbody.appendChild(tr)
        })

2.2 根据价格区间查找

既然是筛选数据,那自然是选择我们的 filter 方法了,为了不让表格数据每次搜索完后上一次的数据还保留,所以每次点击后先清空右侧表格内的数据再去执行筛选。filter 返回的是一个新数组,所以需要一个新定义的数组去接收。筛选过后再使用 forEach 将新数组渲染到右侧的搜错结果表格即可

select1.addEventListener('click',function(){
            rtbody.innerHTML=''
            var newcar=car.filter(function(value,index,arr){
                return value.price>=start.value&&value.price<=end.value;
            })
            // console.log(newcar);
            newcar.forEach(function(value,index,arr){
                var tr=document.createElement('tr');
                tr.innerHTML='<td class="righttd">'+value.name+'  :'+value.price+'万'+'</rd>'
                rtbody.appendChild(tr)
            })
        })

2.3 根据输入结果准确查找

在大批数据中要准确查找某个信息时,使用 some 方法比较合适,因为 some 一旦查找到就会停止遍历,数据量大时可以节省效率,很明显我们这个功能也要让其返回一个符合条件的新数组,但是some返回的结果是一个布尔值,所以此处我们需要自定义数组,然后去用 push 方法将复合查找要求的数据添加到新数组里,并且一旦查找到就让其 返回 ture 终止循环遍历

select2.addEventListener('click',function(){
        rtbody.innerHTML=''
        newarr=[]
        car.some(function(value,index,arr){
            if(value.name==name1.value){
                newarr.push(value)
                return true;
            }
        })
            newarr.forEach(function(value,index,arr){
                var tr=document.createElement('tr');
                tr.innerHTML='<td class="righttd">'+value.name+'  :'+value.price+'万'+'</rd>'
                rtbody.appendChild(tr)
            })
    })

 三:完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .outbox{
           position: absolute;
            width: 1200px;
            left: 50%;
            top: 50%;
            transform: translate(-50%,-50%);
            border-top: 1px solid black;
            border-left: 1px solid black;
            border-right: 2.2px solid black;
            border-bottom: 2.2px solid black;
        }
        .leftbox{
            float: left;
            width: 900px;
            /* height: 600px; */
            box-sizing: border-box;
            border-top: 1.4px solid black;
            border-left: 1.4px solid black;
            border-right: 5px solid black;
        }
        .rightbox{
            float: left;
            width: 298px;
            border-top: 1.5px solid black;
        }
        .top{
            position: relative;
            width: 898px;
            height: 120px;
            border-bottom: 1.4px solid black;
            background-color: rgb(219, 219, 219);
            box-sizing: border-box;
        }
        .bottom{
            padding-top: 28px;
            width: 898px;
            padding-bottom: 28px;
            background-color: rgb(244, 244, 244);
        }
        table{
            margin: 0 auto;
            width: 835px; 
            border: 1.4px solid black;
        }
        thead tr{
            width: 835px;
            height: 40px;
            border: 1.4px solid black;
            background-color: rgb(208, 241, 255);
        }
        tbody tr{
            width: 835px;
            height: 50px;
            border: 1.4px solid black;
            background-color: rgb(255, 239, 239);
        }
        td{
            width: 278px;
            border: 1.4px solid black;
            text-align: center;
            font-weight: bold;
            font-size: 17px;
            letter-spacing: 3px;
        }
        .price{
            position: absolute;
            top: 22px;
            left: 37px;
            letter-spacing: 2px;
            font-size: 18px;
            font-weight: 500;
        }
        .start,.end{
            padding-left: 6px;
            width: 100px;
            height: 30px;
            outline: none;
            font-size: 20px;
        }
        .pricebox{
            position: absolute;
            top: 19px;
            left: 325px;
            letter-spacing: 2px;
            font-size: 18px;
            font-weight: 800;
        }
        .select1{
            position: absolute;
            width: 170px;
            height: 37px;
            top: 17px;
            right: 115px;
            font-size: 14.5px;
            letter-spacing: 2px;
            background-color: rgb(255, 226, 154);

            border: 1px solid black;
        }

        .name-p{
            position: absolute;
            bottom: 22px;
            left: 94px;
            letter-spacing: 2px;
            font-size: 18px;
            font-weight: 500;
        }
        .name{
            position: absolute;
            bottom: 16px;
            left: 325px;
            letter-spacing: 2px;
            font-size: 18px;
            width: 235px;
            height: 30px;
            outline: none;
            padding-left: 6px;
        }
        .select2{
            position: absolute;
            width: 170px;
            height: 37px;
            bottom: 15px;
            right: 115px;
            font-size: 14.5px;
            letter-spacing: 2px;
            background-color: rgb(255, 226, 154);

            border: 1px solid black;
        }
        .select1:hover{
            background-color: rgb(255, 210, 95);
        }
        .select2:hover{
            background-color: rgb(255, 214, 110);
        }
        .rtable{
            margin: 0 auto;
            width: 240px;
            margin-top: 40px;
            margin-bottom: 40px;
        }
        .rthead .rtr{
            width: 240px;
            height: 40px;
            border: 1.4px solid black;
            background-color: rgb(208, 241, 255);
        }
        .rtbody .rtr{
            width: 240px;
            height: 40px;
            border: 1.4px solid black;
            background-color: rgb(255, 201, 114);
        }
        .rtd{
            width: 240px;
            border: 1.4px solid black;
            text-align: center;
            font-weight: bold;
            font-size: 17px;
            letter-spacing: 3px;
        }
        .righttd{
            width: 240px;
            border: 1.4px solid black;
            text-align: center;
            font-weight: bold;
            font-size: 17px;
            letter-spacing: 3px;
            background-color: rgb(255, 234, 206);
        }
        .clear{
            width: 85px;
            height: 85px;
            position: absolute;
            top: 16px;
            right: 13px;
            border: 1px solid black;
            font-weight: 400;
            font-size: 15px;
            background-color: #fff;
        }
        .clear:hover{
            background-color: rgb(247, 247, 247);
        }
    </style>
</head>
<body>
    <div class="outbox">
        <div class="leftbox">
            <div class="top">
                <button class="clear">清空查询</button>
               <p class="price">您要查询的价格区间为(万元):</p>
               <div class="pricebox">
                   <input type="text" class="start"> ~ <input type="text" class="end">
               </div>
               <input type="button" class="select1" value="从价格区间查询">
               <p class="name-p">您要查询的车辆名称为:</p>
                   <input type="text" class="name">
               <input type="button" class="select2" value="从车辆名称查询">
            </div>
            <div class="bottom">
               <table cellspacing="0" style="border-collapse: collapse;">
                   <thead>
                       <tr>
                           <td>汽车编号</td>
                           <td>汽车名称</td>
                           <td>汽车售价(万元)</td>
                       </tr>
                   </thead>
                   <tbody>
                   </tbody>
               </table>
            </div>
       </div>
       <div class="rightbox">
        <table cellspacing="0" style="border-collapse: collapse;" class="rtable">
            <thead class="rthead">
                <tr class="rtr">
                    <td class="rtd">查询结果</td>
                </tr>
            </thead>
            <tbody class="rtbody">
            </tbody>
        </table>
       </div>
    </div>
    
     <script>
        var car=[
            {
                'id':1000001,
                'name':'奥迪A6 Avent',
                'price':46
            },
            {
                'id':1000002,
                'name':'奥迪A6 allroad',
                'price':52
            },
            {
                'id':1000003,
                'name':'奥迪RS6',
                'price':145
            },{
                'id':1000004,
                'name':'奥迪RS7',
                'price':154
            },
            {
                'id':1000005,
                'name':'奥迪A7L',
                'price':82
            },
            {
                'id':1000006,
                'name':'GTR R32',
                'price':140
            },
            {
                'id':1000007,
                'name':'GTR R33',
                'price':101
            },
            {
                'id':1000008,
                'name':'GTR R34',
                'price':180
            },
            {
                'id':1000009,
                'name':'GTR R35',
                'price':160
            }
        ]
        var tbody=document.querySelector('tbody');
        var rtbody=document.querySelector('.rtbody');
        var start=document.querySelector('.start');
        var end=document.querySelector('.end');
        var select1=document.querySelector('.select1');
        var clear=document.querySelector('.clear');
        var select2=document.querySelector('.select2');
        var name1=document.querySelector('.name');
        clear.addEventListener('click',function(){
            window.location.reload()
        })
        car.forEach(function(value,index,arr){
            var tr=document.createElement('tr');
            tr.innerHTML='<td>'+value.id+'</td><td>'+value.name+'</td><td>'+value.price+'</td>'
            tbody.appendChild(tr)
        })
        select1.addEventListener('click',function(){
            rtbody.innerHTML=''
            var newcar=car.filter(function(value,index,arr){
                return value.price>=start.value&&value.price<=end.value;
            })
            // console.log(newcar);
            newcar.forEach(function(value,index,arr){
                var tr=document.createElement('tr');
                tr.innerHTML='<td class="righttd">'+value.name+'  :'+value.price+'万'+'</rd>'
                rtbody.appendChild(tr)
            })
        })
    select2.addEventListener('click',function(){
        rtbody.innerHTML=''
        newarr=[]
        car.some(function(value,index,arr){
            if(value.name==name1.value){
                newarr.push(value)
                return true;
            }
        })
            newarr.forEach(function(value,index,arr){
                var tr=document.createElement('tr');
                tr.innerHTML='<td class="righttd">'+value.name+'  :'+value.price+'万'+'</rd>'
                rtbody.appendChild(tr)
            })
    })
     </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/408500.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

axios二次封装(详细+跨域问题)

一&#xff0c;为什么要对axios进行二次封装&#xff1f; 答&#xff1a;主要是要用到请求拦截器和响应拦截器; 请求拦截器&#xff1a;可以在发请求之前可以处理一些业务 响应拦截器&#xff1a;当服务器数据返回以后&#xff0c;可以处理一些事情 二&#xff0c;axios的二次…

html/javascript实现简单的上传

一、 上传用到的按钮类型是type file 二、 为了美化上传按钮&#xff0c;我们通常会自定义按钮&#xff0c;将默认的上传隐藏掉。 fileInputs.click() 触发上传按钮点击 三、 new FileReader() 读取文件内容方法&#xff1a; readAsText() 读取文本文件&#xff0c;(可以使用…

NodeJs - for循环的几种遍历方式

NodeJs - for循环的几种遍历方式一. for循环的几种遍历方式1.1 遍历的目标不一样1.2 空属性的遍历1.3 异步的调用二. 总结一. for循环的几种遍历方式 我们先来看下for循环的4种不同遍历方式&#xff1a; const arr [10,20,30,40,50];for (let i 0; i < arr.length; i) {…

VUE 年份范围选择器

VUE 年份范围选择器遇到一个需求,需要写一个年份选择器,是范围的年份选择器,比如:xxx年到xxx年 在使用elment UI的时候发现没有这种功能,于是采用el-date-picker 的年份选择器自己后封装了一个年份范围选择器 由于组件使用的地方很多,所以格式化都在组件中处理,回传格式在回传的…

Vue项目实战-vue2(移动端)

Vue项目实战(移动端)# 相关资料(一) 创建项目(二) 禁用Eslint(三) devtool(四) 添加less支持(五) vue路由配置(背诵)(六) 父子组件通信(背诵)(七) axios拦截器(背诵)(八) Sticky 粘性布局(九) 图片懒加载(十) 全局注册组件(十一) slot插槽(十二) 使用ui库需要关注的三点(十三)…

【Vue】Vue的安装

&#x1f3c6;今日学习目标&#xff1a;Vue3的安装 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人格言&#xff1a;生如芥子&#xff0c;心藏须弥 ⏰本期期数&#xff1a;第一期 &#x1f389;专栏系列&#xff1a;Vue3 文章目录前言Vue3安装独立版本CDN安装第一个Vue程序总…

vue递归组件—开发树形组件Tree--(构建树形菜单)

在 Vue 中&#xff0c;组件可以递归的调用本身&#xff0c;但是有一些条件&#xff1a; 该组件一定要有 name 属性要确保递归的调用有终止条件&#xff0c;防止内存溢出不知道大家有没遇到过这样的场景&#xff1a;渲染列表数据的时候&#xff0c;列表的子项还是列表。如果层级…

Vue基础--webpack介绍以及基础配置

写在最前&#xff1a;实际开发中需要自己配置webpack吗&#xff1f; 答案&#xff1a;不需要&#xff01; 实际开发中会使用命令行工具&#xff08;俗称CLI&#xff09;一键生成带有webpack的项目开箱即用&#xff0c;所有webpack的配置项都是现成的&#xff01;我们只需要知道…

python web开发基础

网站是存储在服务器上的文件&#xff0c;服务器是托管网站的计算机。这些服务器连接到一个称为 Internet 的网络。访问这些网站的计算机称为“客户端”。 要访问网站需要知道其IP地址&#xff0c;IP 地址是一串唯一的数字。每个设备都有一个 IP 地址。可以在控制台cmd输入命令…

前端笔记(10) Vue3 Router 监听路由参数变化

前言 Vue Router是开发Vue项目的必不可少的工具&#xff0c;也是极为重要的学习要点。 本篇介绍下Vue Router的基础使用和如何监听路由参数变化。 Vue Router入门 1 安装Router 安装Vue Router非常方便&#xff0c;只需执行一个命令&#xff0c;如果还不知道怎么搭建Vue项目…

详解 HttpServletResponse

详解 HttpServletResponse 核心方法代码示例1.设置响应状态码2.设置响应头3.设置响应内容&#xff08;1&#xff09;响应一个网页&#xff08;简单HTML&#xff09;&#xff08;2&#xff09;响应一个网页&#xff08;复杂HTML&#xff09;返回已有的一个网页1.重定向2.转发返回…

uniapp - 编译微信小程序项目的微信授权登录、获取微信手机号登录、最新版微信直接登录、手机与验证码登录的示例源码(适用于 uniapp 微信小程序项目,源代码直接开箱即用)超级详细的代码及注释

效果图 uniapp 项目编译微信小程序,一些常见的登录方式及源代码,示例代码干净整洁无BUG拿来即用。 本文示例实现了 uniapp 微信小程序项目的登录功能,包含微信授权登录、获取微信手机号登录、最新直接登录等, 你可以选择一个,直接复制源代码,稍微改改就能应用到你的项目…

后台管理系统

后台管理系统主要是我们内部人员使用的一款用来管理我们产品的一个系统&#xff0c;然后呢&#xff0c;我们今天写的呢是一个电商的后台管理系统。主要是可以用来管理我们的用户还有我们是商品的。 我们这个系统呢采用的是一个前后端分离的模式&#xff0c;主要是使用后端给我…

Vue 当页面进入全屏状态时element-ui的el-select下拉菜单不显示问题

在前两天进行页面全屏时&#xff0c;一切都还好好的&#xff0c;可当使用element-ui中的el-select时&#xff0c;下拉菜单却怎么也显示不出来&#xff0c;但只要退出全屏状态&#xff0c;立马就好。 非全屏时&#xff1a; 全屏时&#xff1a; 开始我以为是层级问题&#xff0…

前端加载高德离线地图的解决方案

核心是需要下载地图瓦片放在本地&#xff0c;脱离在线地图服务&#xff0c;实现离线加载地图。使用BIGMap工具下载地图离线瓦片到本地 下载地址&#xff1a;http://www.bigemap.com/reader/download/detail201802015.html BIGEMAP GIS Office-全能版需要注册试用版&#xff08;…

web前端面试宝典——带你直击面试重难点(40个经典题目,涵盖近90%的考点,码字2w,干货满满!)

系列文章目录 JavaScript 知识梳理&#xff0c;收录了web前端面试 95%以上 的高频考点&#xff0c;满满的干货。给你做一个高效的知识梳理&#xff0c;为你的面试保驾护航&#xff01; 内容参考链接HTML & CSS 篇HTML & CSS 篇JavaScript 篇&#xff08;一&#xff09;…

【微信小程序】条件渲染和列表渲染

&#x1f352;&#x1f352; 观众老爷们好啊&#xff0c;牛牛又更新了&#xff0c;上文我们详细了解了微信小程序中的事件绑定&#xff0c;那么今天我们就来讲讲WXML语法中的列表渲染和条件渲染&#xff0c;它俩也是非常重要的知识点&#xff0c;赶紧学起来吧。 &#x1f352;&…

如何更改ElementUI组件的图标大小以及标签属性

话不多说&#xff0c;直接上菜。 ElementUI提供的Rate评分组件的默认大小是这样的 图标太小了&#xff0c;想设置宽高、行高、尺寸&#xff0c;但代码不起作用。 打开浏览器调试&#xff0c;发现是用font-size设置才有用。 由此代码存在优先级问题&#xff0c;要提高优先级。…

vscode里面使用vue的一些插件,方便开发

1、vue 2 Snippets &#xff08;vue语法提示&#xff09; vue提示这个也可以 1.1 Vue VSCode Snippets 2、vetur Vetur支持.vue文件的语法高亮显示&#xff0c;除了支持template模板以外 3、Element UI Snippets(饿了么的提示) 4、indent-rainbow&#xff08;缩进高亮提示) 5…

Vue Element table表格实现表头自定义多类型动态筛选 , 目前10种筛选类型,复制即用

一、效果图 目前10种筛选类型 看看是否是你需要的&#xff0c;本文可能有点长 &#xff0c;我尽可能的给讲清楚&#xff0c;包括源码附上 二、无聊发言 点击当前行跳转部分数据后缀追加图标某列数据根据状态增加颜色标识 三、前言 实现图中的表格&#xff0c;特定的两个要求&…