IFE斌斌学院-JS总结(1)

零基础部分任务 github代码地址

题目地址

任务一:用户可以在输入框中输入任何内容,点击“确认填写”按钮后,用户输入的内容会显示在“您输入的值是”文字的右边

  • 网页上提供的代码,用的是(function(){})()这样的形式,好处是这样相当于是函数声明式声明函数,不会有函数提升。

任务二:页面加载后,将提供的空气质量数据数组,按照某种逻辑(比如空气质量大于60)进行过滤筛选,最后将符合条件的数据按照一定的格式要求显示在网页上

  • 筛选:可以用filter函数,也可以for循环遍历取值。
  • 生成新的list:注意字符串拼接,实现还是用for循环遍历,最后插入节点。
  • 难点:在生成第几名城市时(暂时不要求按顺序排列),如果是用一个固定的数组var rankList = ['一','二','三','四','五'];然后,再拼接字符串的时候在for循环中取值,这样的扩展性并不好。所以,如何把一个阿拉伯数字转换为汉字字符呢?
//把数字转换为汉字数字
//(1234567890).toLocaleString('zh-Hans-CN-u-nu-hanidec',{useGrouping:false})
//=>"一二三四五六七八九〇"
// [1,2,3,4].map(i=>i.toLocaleString('zh-Hans-CN-u-nu-hanidec',{useGrouping:false}))
//["一", "二", "三", "四"]

任务三读取页面上已有的source列表,从中提取出城市以及对应的空气质量,将数据按照某种顺序排序后,在resort列表中按照顺序显示出来

<ul id="source">
    <li>北京空气质量:<b>90</b></li>
    <li>上海空气质量:<b>70</b></li>
    <li>天津空气质量:<b>80</b></li>
    <li>广州空气质量:<b>50</b></li>
    <li>深圳空气质量:<b>40</b></li>
    <li>福州空气质量:<b>32</b></li>
    <li>成都空气质量:<b>90</b></li>
</ul>

<ul id="resort">
</ul>

<button id="sort-btn">排序</button>

/**
 * getData方法
 * 读取id为source的列表,获取其中城市名字及城市对应的空气质量
 * 返回一个数组,格式见函数中示例
 */
function getData() {
    /*
     coding here
     */
    var data = new Array();

    var source = document.getElementById('source');
    var sourceLi = source.getElementsByTagName('li');
//    为了获得li中的纯文本内容,百度了很多,没有得到合适的结果,结果通过chrome查看属性,找到了很多可以取得纯文本内容的属性,赞
    for(var i= 0;i < sourceLi.length;i ++){
//        console.log(sourceLi[i].textContent);
//        通过:分割字符串
        data.push(sourceLi[i].textContent.split(':'));
    }
    /*
     data = [
     ["北京", 90],
     ["北京", 90]
     ……
     ]
     */

    return data;

}

/**
 * sortAqiData
 * 按空气质量对data进行从小到大的排序
 * 返回一个排序后的数组
 */
function sortAqiData(data) {
    data.sort(function(a,b){
        return a[1]- b[1];
    });
    return data;
}

/**
 * render
 * 将排好序的城市及空气质量指数,输出显示到id位resort的列表中
 * 格式见ul中的注释的部分
 */
function render(data) {
//    console.log(data);
    var newList= "";
    var resort = document.getElementById('resort');
    data.forEach(function(value,index){
        newList += '<li>第' + (index + 1).toLocaleString('zh-Hans-CN-u-nu-hanidec',{useGrouping:false}) + '名:' + value[0] + '空气质量:' + '<b>' + value[1] + '</b></li>';
    })
    resort.innerHTML = newList;
}

function btnHandle() {
    var aqiData = getData();
    aqiData = sortAqiData(aqiData);
    render(aqiData);
}

function init() {
    // 在这下面给sort-btn绑定一个点击事件,点击时触发btnHandle函数
    var sort = document.getElementById('sort-btn');
    sort.addEventListener('click',function(){
        btnHandle();
    });
}

init();
  • 首先网页提供的结构,js通过一个init()函数驱动,在init()函数里面绑定点击事件
  • 点击事件驱动的是 btnHandle()函数,这个函数里面调用了其他方法,实现了排序与生成列表。
  • 把整个流程分为三步
    • getData():得到原列表中的数据,并组成数组,return。
    • sortAqiData(data):对数据进行排序,return
    • render(data):渲染新的有序列表
  • getData():实现难点在于得到<li>城市<b>空气指数</b></li>中的纯文本内容,有很多种方法,innertext(),outext(),但是貌似兼容都不是很好,或者说正在被淘汰中,所以,我在注释中也说了,我在打印li的时候,观察他的属性,看到了许多属性的属性值都为纯文本,我从中选择了textContent这个属性。然后,用了冒号分割split()的方式,转换为了子数组,并push进新的数组中,return。
  • sortAqiData(data):data.sort(function(a,b){ return a[1]- b[1]; });这个就是,第一个参数-第二个参数,然后从小到大排列,return。
  • render(data):这里就用到了阿拉伯数字转换为汉字的方式,并且用了forEach简化一下代码(forEach一定是大写)。data.forEach(function(value,index){newList += '<li>第' + (index + 1).toLocaleString('zh-Hans-CN-u-nu-hanidec',{useGrouping:false}) + '名:' + value[0] + '空气质量:' + '<b>' + value[1] + '</b></li>';});

总结

总的来说,我觉得自己做的不好,因为其实这个标题是零基础,但是后来才发现,没有百度我就是个白痴咯,不过,大体流程思路上咩有问题,主要就是提高代码的质量。最开始我就没有想到用forEach,就想用for,然后拜读了一下别人的代码以后,才这样实现。
还有就是,我觉得其实重要的是要观察,他给的原代码,是一个思路的学习。模块分析的也很好。

加油加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值