zoukankan      html  css  js  c++  java
  • 前端笔记(使用htmlcssjquery造n*n的格子,根据预算购买到最多的商品)

    需求:创建一个n*n的格子,n是输入框的数字,点击重渲染可以重新画一个n*n的格子,鼠标移入格子中,对应的格子背景设变成红色,点击对应的格子,背景色变成蓝色,再点一次还原颜色。

    要造格子有好几种方式,可以用table、ul和li,或者直接使用完全的div

    这里为了方便理解,我使用ul和li。

    定义html:

    box用于渲染格子

    <div class="box"></div>
    <div>
        <input type="text" value="10" id="num">
        <input type="button" onclick="render()" value="重渲染">
    </div>

    css:

    这里我们使用ul加flex,让li平分,list-style-type:none;去除li的默认点,li:hover定义鼠标移入时的样式,定义.blue作为样式渲染

    .div{
        height: 100%;
    }
    .box ul{
        display: flex;
        margin: 0;
    }
    .box ul li{
        width: 10px;
        height: 10px;
        border: 1px solid #000;
        list-style-type:none;
    }
    li:hover{
        background-color: red;
    }
    li.blue{
        background-color: blue;
    }

    js:

    ul与li的创建使用数组的join转字符串

    {
        function render(){
            let num=$("#num").val()//定几*几格子
            let ul=[],li=[]
            for(let i=0;i<num;i++){
                li.push(`<li></li>`)
            }
            li=li.join("")//li的dom
            for(let i=0;i<num;i++){
                ul.push(`<ul>${li}</ul>`)
            }
            ul=ul.join("")//ul的dom
            $(".box").html(ul)
            $("li").click(function(){//点击格子
                let isBlue=$(this).hasClass("blue")
                if(isBlue){
                    $(this).removeClass("blue")
                }else{
                    $(this).addClass("blue")
                }
            })
        }
        render()
    }

    需求:根据所有的商品单价(元),和你的预算(元),指定一个尽可能买得多的商品的方案

    思路是 先将所有商品的价格按从小到大排序起来,设置这个预算值初始为0,从最便宜的开始买,每买一个就加上当前的价格,直到超出预算,那超出前的那次就是最好的购买方式。

    html:

    <div>
        预算:<input type="text" id="ys" value="200"><br>
        商品价格:<input type="text" id="jg" value="50 30 40 55 242 21"><br>
        <input type="button" value="计算" onclick="js()"><br>
        结果:<span id="res"></span>
    </div>

    js:

    使用sort进行数值排序,使用split将字符串拆分成数组,使用join将数组转化为字符串

    {
        function js(){
            let ys=$("#ys").val(),jg=$("#jg").val()
            let res=0,km=[]//需要金额 可买
            let arr=jg.split(" ")
            arr.sort((a,b)=>a-b)
            for(let i=0;i<arr.length;i++){
                res+=Number(arr[i])
                console.log(res)
                if(res > Number(ys)){
                    res-=Number(arr[i])
                    break
                }
                km.push(Number(arr[i]))
            }
            console.log(res,km)
            $("#res").text(`需要金额:${res},可买物品:${km.join(" ")}`)
        }
    }
  • 相关阅读:
    15道简单算法题
    提高SQL查询效率
    算法--两道百度笔试题
    .NET牛人应该知道些什么?
    VS创建、安装、调试 windows服务(windows service)
    Build System 和Test Framework overview总结
    3.8 Templates -- Actions
    3.7 Templates -- Links
    3.6 Templates -- Binding Element Class Names(绑定元素类名)
    3.5 Templates -- Binding Element Attributes(绑定元素属性)
  • 原文地址:https://www.cnblogs.com/wuhairui/p/12678696.html
Copyright © 2011-2022 走看看