排序 【总结】

需求

我做的有三个按钮,【从大到小】、【从小到大】、【乱序】

点击按钮发生相应的变化

需求分析:

涉及到排序,数组的sort()方法

div重新设置样式、或干脆重新插入div,前者更好点

实现思路:

1.提取所有div

2.取出图片地址和span内容

3.因为要根据span内容来排序,所以span单独再存一份副本

4.排序span副本

5.用for循环用已排序的span副本和原本进行比对,对上了,当前下标的div就重新赋这个原本的值,然后进行下一次比对,直到比对完成

难点:

难点解决方案:

涉及的新知识:

arr.sort(function(a,b){

  a-b;

});

用json存数据

优化方向:

这个作业,1.我所有的声明和函数调用全部写在全局里,严重污染全局,日后想办法解决 2.代码过多

备注:

IIFE写法来写功能

如果两样东西第一排序值一样,能不能再设置个第二排序值,第三排序值,类似淘宝那样的排序,淘宝的排序是怎么做的

学习市面上的几种排序方法

 

 

/*

点击  --->    调用排序函数,传入对应参数   --->     排序函数通过switch值return给sort参数    --->
排序完成,调用设置参数函数    --->   排序成功


1.获得界面所有div,获得这些div相应的信息保存在数据源数组里
2.这里我将取得的数据存一份在json里sValue,另一份排序用的关键值单独存在sIndex里
3.获取按钮,绑定按钮点击时间函数
4.写排序函数,先把关键值数组排好序
5.写设置src和span的函数,根据第4步排好序的值来匹配,每一个都要跟sValue一一匹配,如果匹配上了,就取值赋值并删除掉这条数据


sortDiv函数用到外面的sIndex、sValue、oriDiv和oriDivLen变量
sortIndex函数用到外面的sIndex变量


*/


//获取元素
var oCon = $('con'),
    oriDiv = oCon.getElementsByTagName('div'),
    oriDivLen = oriDiv.length;

var sValue = [],
    sIndex = [];


//提取值塞进数组
for( var i=0; i<oriDivLen; i++ ){
    var json = {};
    json.imgSrc = oriDiv[i].getElementsByTagName('img')[0].src;
    json.spanText = oriDiv[i].getElementsByTagName('span')[0].innerHTML;
    sValue.push(json);
    sIndex.push(json.spanText);
}



//三个按钮
var oBtns = $('btns'),
    btn1 = oBtns.getElementsByTagName('a')[0],
    btn2 = oBtns.getElementsByTagName('a')[1],
    btn3 = oBtns.getElementsByTagName('a')[2];


btn1.onclick = function(){
    sortIndex(1,sIndex);
    sortDiv();
}


btn2.onclick = function(){
    sortIndex(-1,sIndex);
    sortDiv();
}


btn3.onclick = function(){
    sortIndex(0,sIndex);
    sortDiv();
}




//下标排序函数
function sortIndex( sortType,dataArr ){
//-1:升序;        1:降序;        0:乱序

    dataArr.sort(function(a,b){
        switch(sortType){
            case -1:
                return a-b;
                break;
            case 1:
                return b-a;
                break;
            case 0:
                return Math.random() - 0.5;
                break;
            default:
                break;
        }

    });
}









//div重赋值函数
function sortDiv(){

    for(var i=0; i<oriDivLen; i++){
        for(var j=0; j<oriDivLen; j++){
            var spanAttr = sValue[j].spanText;
            var imgSrcAttr = sValue[j].imgSrc;
            if( sIndex[i] == spanAttr ){

                oriDiv[i].getElementsByTagName('span')[0].innerHTML = spanAttr;
                oriDiv[i].getElementsByTagName('img')[0].src = imgSrcAttr;
                break;
            }
        }
    }


}

 

 

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>

<style>
    
*{ margin: 0; padding: 0; }
body{ background: #f1f1f1; }

.item{ margin: 15px; width: 150px; float: left; padding: .5em; border: 1px solid #673ab7; border-radius: 15px; }
.item a{ width: 80%; }
.item img{ width: 100%; }
.item p{ font-size: .8em; float: left; width: 100%; text-align: center; margin-top: 6px; color: #666; }
.item span{ color: #010101; font-weight: bold; }


#con{ width: 1008px; margin: 0 auto; }

.clear{ zoom: 1; }
.clear:after{ content: ''; display: block; vertical-align: middle; clear: both; }


.main{ margin-top: 20px; }


#btns{   
    width: 300px;
    height: 50px;
    margin: 0 auto;
}


#btns a{ position: relative; width: 80px; height: 30px; text-decoration: none; float: left; background: #9C27B0;
    color: #fff; line-height: 30px; text-align: center; margin: 5px; border-radius: 5px; }
#btns a:after{ content: ''; width: 80px; height: 30px; z-index: -1; background: #6e137d; position: relative; top: -27px; display: block; border-radius: 5px; }
#btns a:hover:after{ top: -30px; }
#btns a:hover{ background: #6e137d; top: 3px; }

</style>

</head>
<body>


<div class="main">

    <div id="btns">
        <a href="javascript:;">从大到小</a>
        <a href="javascript:;">从小到大</a>
        <a href="javascript:;">乱序排列</a>
    </div>

    <div id="con" class="clear">
        <div class="item">
            <a href="#"><img src="img/1.jpg" alt="图片"></a>
            <p>阅读量:<span>112</span></p>
        </div>


        <div class="item">
            <a href="#"><img src="img/2.jpg" alt="图片"></a>
            <p>阅读量:<span>342</span></p>
        </div>


        <div class="item">
            <a href="#"><img src="img/3.jpg" alt="图片"></a>
            <p>阅读量:<span>6757</span></p>
        </div>

        
        <div class="item">
            <a href="#"><img src="img/4.jpg" alt="图片"></a>
            <p>阅读量:<span>2356</span></p>
        </div>


        <div class="item">
            <a href="#"><img src="img/5.jpg" alt="图片"></a>
            <p>阅读量:<span>7784</span></p>
        </div>

        
        <div class="item">
            <a href="#"><img src="img/6.jpg" alt="图片"></a>
            <p>阅读量:<span>1231</span></p>
        </div>

        
        <div class="item">
            <a href="#"><img src="img/7.jpg" alt="图片"></a>
            <p>阅读量:<span>1345</span></p>
        </div>


        <div class="item">
            <a href="#"><img src="img/8.jpg" alt="图片"></a>
            <p>阅读量:<span>1130</span></p>
        </div>

        
        <div class="item">
            <a href="#"><img src="img/9.jpg" alt="图片"></a>
            <p>阅读量:<span>42</span></p>
        </div>

        
        <div class="item">
            <a href="#"><img src="img/10.jpg" alt="图片"></a>
            <p>阅读量:<span>345</span></p>
        </div>
    </div>
</div>


<script src="getId.js"></script>
<script src="main.js"></script>

</body>
</html>