2021-11-24

數(shù)組方法應(yīng)用案例

案例要求

target.png

目標(biāo):通過頂部的輸入框和按鈕來篩選后端傳送的數(shù)據(jù)并顯示在頁面上

案例分析

HTML部分

首先用一個大div盒子將所有的東西裝起來

盒子內(nèi)部分為上下兩部分:篩選 + 結(jié)果展示挤悉,分別用兩個div盒子裝起來秒际。

篩選部分包含一個input輸入框共缕,和三個按鈕琢感。按鈕用三個span標(biāo)簽闹丐。

結(jié)果展示部分每一條信息用一個li標(biāo)簽展示,li標(biāo)簽內(nèi)部包含一個img標(biāo)簽和兩個p標(biāo)簽

CSS部分

  1. 整體在頁面中顯示的位置和大小
  2. 篩選部分中輸入框大小藕畔、間距臭胜、按鈕顏色、被選中的狀態(tài)
  3. 結(jié)果展示圖片大小魂迄、位置粗截、文字大小、顏色

JS部分

當(dāng)通過HTML和CSS將靜態(tài)頁面的展示效果做好并滿足要求之后捣炬,開始JS部分

  1. 默認(rèn)狀態(tài)下將顯示所有人員信息熊昌。通過foreach將數(shù)組數(shù)據(jù)遍歷并顯示在頁面showMessage
  2. 檢測input輸入的內(nèi)容,與人員姓名進(jìn)行比對filterArrByText湿酸,將符合要求的數(shù)據(jù)顯示在頁面showMessage婿屹。用到的數(shù)組方法filter
  3. 點(diǎn)擊按鈕,與人員性別進(jìn)行比對filterArrBySex推溃,將符合條件的人員信息在頁面顯示出來showMessage
  4. 符合條件下的信息顯示昂利。
    • 先通過文本篩選并顯示,然后再次基礎(chǔ)山篩選性別
    • 先通過性別篩選铁坎,然后通過文本復(fù)合篩選

案例實(shí)踐

HTML

<!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>
    <link rel="stylesheet" href="css/index.css">
</head>
<body>
    <!-- wrapper包含了所有內(nèi)容蜂奸,方便設(shè)置整體在頁面中的位置,和基本樣式 -->
    <div class="wrapper">
        <!-- 篩選部分 -->
        <div class="filterFunc">
            <input type="text" id="demo"></input>
            <span class="btn" sex='m'>Male</span>
            <span class="btn" sex='f'>Female</span>
            <span class="btn active" sex='a'>All</span>
        </div>
        <!-- sex為自定義屬性 -->
    
        <!-- 列表展示部分 -->
        <div class="friendList">
            <ul>
                <!-- 具體展示部分硬萍,在項(xiàng)目實(shí)施開始階段實(shí)施扩所,便于配合CSS設(shè)置樣式,
                    以此判斷是否復(fù)合要求朴乖,在靜態(tài)頁面完成之后注釋掉 -->
                <!-- <li>
                    <img src="src/01.jfif" alt="">
                    <p class="name">15644gsgf</p>
                    <p class="des">15644gsgf</p>
                </li>
                <li>
                    <img src="src/02.jfif" alt="">
                    <p class="name">15644gsgf</p>
                    <p class="des">15644gsgf</p>
                </li>
                <li>
                    <img src="src/03.jfif" alt="">
                    <p class="name">15644gsgf</p>
                    <p class="des">15644gsgf</p>
                </li>
                <li>
                    <img src="src/04.jfif" alt="">
                    <p class="name">15644gsgf</p>
                    <p class="des">15644gsgf</p>
                </li>
                <li>
                    <img src="src/05.jfif" alt="">
                    <p class="name">15644gsgf</p>
                    <p class="des">15644gsgf</p>
                </li> -->
            </ul>
        </div>
    </div>
    <script src="js/index.js"></script>
</body>
</html>

CSS

/* reset style */
*{
    margin: 0;
    padding: 0;
    list-style: none;
}

/* filterFunc style*/
.wrapper{
    width: 400px;
    margin: 100px auto 0px;
    border: 1px solid #000;
    border-radius: 5px;
    padding: 10px;
    background-color: #f4f4f4;
}
.wrapper .filterFunc{
    margin-bottom: 10px;
}
.wrapper .filterFunc input{
    width: 220px;
    height: 15px;
    border-radius: 5px;
    padding:5px;
    outline: none;
}
.wrapper .filterFunc .btn{
    color: #4171f2;
    padding: 5px;
    cursor: pointer;
}
.wrapper .filterFunc .active{
    color: azure;
    background-color: #4171f2;
    border-radius: 5px;
}

/* friendList style */
.friendList ul li{
    border-bottom: 1px solid gray;
    position: relative;
    padding: 5px 0 5px 50px;
}
.friendList ul li img{
    width: 40px;
    height: 40px;
    position: absolute;
    left: 0;
    top: 5px;
}
.friendList ul li .des{
    font-size: 10px;
    color: gray;
    margin-top: 3px;
}

JS

var personArr = [
    { name: '張三', sex: 'm', age: 18,des: '別叫我張三',src:'src/00.jfif'},
    { name: '王二', sex: 'f', age: 22,des: '別叫我李四',src:'src/01.jfif'},
    { name: '李四', sex: 'm', age: 28,des: '別叫我王二',src:'src/02.jfif'},
    { name: '李四兒', sex: 'm', age: 28,des: '別叫我王二',src:'src/05.jfif'},
    { name: '麻子', sex: 'f', age: 46,des: '叫我大帥比',src:'src/03.jfif'},
    { name: '小麻子', sex: 'm', age: 16,des: '人家是小美女啦',src:'src/04.jfif'}
];
var oUl = document.getElementsByClassName('friendList')[0].getElementsByTagName('ul')[0];
var btnText = {
    text: '',
    sex: 'a'
}//存儲輸入的文本和按鈕的sex屬性值祖屏,便于進(jìn)行符合篩選,默認(rèn)text為空串寒砖,sex為a赐劣,即顯示全部

//向頁面添加信息
function showMessage(data){
    var htmlStr = '';
    data.forEach(function(ele,index,self){
        htmlStr +='<li><img src=' + ele.src + '><p class="name">' + ele.name + '</p><p class="des">' + ele.des + '</p></li>'
    })
    oUl.innerHTML = htmlStr;
}
showMessage(personArr);

//獲取輸入文本信息
var oInput = document.getElementsByTagName('input')[0];
function filterArrByText(data,text){//通過輸入的文本篩選,返回篩選后的數(shù)組
    // 如果text為空就不遍歷,提高性能
    if(!text){
        return data;
    }
    return data.filter(function(ele,index,self){
        return ele.name.indexOf(text) != -1;
    });
    // 通過indexOf方法判斷name中是否含有輸入的文本哩都,這個方法比較low魁兼,
    // 只能判斷text是否為name非空子集
    // 后續(xù)可以寫一個方法,只要text中含有和name中相同的關(guān)鍵字就返回true
    //即取交集
}

    //綁定輸入事件
oInput.oninput = function(){
    //當(dāng)用戶輸入信息時調(diào)用方法filterArrByText
    var filterArr = filterArrByText(personArr,this.value);
    btnText.text = this.value;//將輸入的文本更新至全局
    showMessage(filterArrBySex(filterArr,btnText.sex));
    //這里將得到的數(shù)組再根據(jù)sex篩選一次,將結(jié)果展示到頁面
}
// 獲取btn按鈕咐汞,綁定事件
var btnObj = document.getElementsByClassName('btn');
btnArr = [].slice.call(btnObj,0);//通過數(shù)組的slice方法將類數(shù)組轉(zhuǎn)化為數(shù)組
var lastActiveBtn = btnArr[btnArr.length - 1];//默認(rèn)選中最后一個按鈕


//給每個按鈕綁定鼠標(biāo)單擊事件
btnArr.forEach(function(ele,index){
    ele.onclick = function(){
        // console.log(ele)
        setActive(this);
        var sex = ele.getAttribute('sex');//獲取自定義屬性值
        btnText.sex = sex;//更新全局sex盖呼,便于符合篩選
        var filterArr = filterArrBySex(personArr,sex);
        showMessage(filterArrByText(filterArr,btnText.text));
    };
})
//設(shè)置按鈕選中樣式
function setActive(obj){
    obj.className = 'btn active';//單擊按鈕更改選中樣式
    lastActiveBtn.className = 'btn';//清除原有樣式
    lastActiveBtn = obj;//將選中按鈕設(shè)置為上一個選中按鈕,便于下一次清除樣式
}

// 通過btnSex篩選
function filterArrBySex(data,sex){
    if(sex == 'a'){
        return data;
    }
    return data.filter(function(ele,index){
        return ele.sex == sex;
    })
}

總結(jié)

通過前兩天對數(shù)組方法的學(xué)習(xí)化撕,有了很大的收獲几晤。在本次實(shí)例練習(xí)中,發(fā)現(xiàn)了幾個問題:

  1. 不知道如何獲取input標(biāo)簽輸入的值
  2. 不知道如何將類數(shù)組對象轉(zhuǎn)化為數(shù)組(其實(shí)也并不清楚為什么獲得的是一個類數(shù)組對象)
  3. 如何獲取DOM元素植阴,怎么得到各屬性的值蟹瘾,怎么更改屬性值(能不能更改屬性值 ),怎么添加屬性以及屬性值掠手?DOM和BOM元素的操作這塊兒比較弱憾朴,還需要再學(xué)習(xí)學(xué)習(xí)。

堅(jiān)持學(xué)習(xí)喷鸽!加油众雷!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市做祝,隨后出現(xiàn)的幾起案子砾省,更是在濱河造成了極大的恐慌,老刑警劉巖混槐,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件编兄,死亡現(xiàn)場離奇詭異,居然都是意外死亡声登,警方通過查閱死者的電腦和手機(jī)翻诉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捌刮,“玉大人碰煌,你說我怎么就攤上這事∩鹱鳎” “怎么了芦圾?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俄认。 經(jīng)常有香客問我个少,道長,這世上最難降的妖魔是什么眯杏? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任夜焦,我火速辦了婚禮,結(jié)果婚禮上岂贩,老公的妹妹穿的比我還像新娘茫经。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布卸伞。 她就那樣靜靜地躺著抹镊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荤傲。 梳的紋絲不亂的頭發(fā)上垮耳,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機(jī)與錄音遂黍,去河邊找鬼终佛。 笑死,一個胖子當(dāng)著我的面吹牛雾家,可吹牛的內(nèi)容都是我干的查蓉。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼榜贴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妹田?” 一聲冷哼從身側(cè)響起唬党,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鬼佣,沒想到半個月后驶拱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡晶衷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年蓝纲,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晌纫。...
    茶點(diǎn)故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡税迷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锹漱,到底是詐尸還是另有隱情箭养,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布哥牍,位于F島的核電站毕泌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嗅辣。R本人自食惡果不足惜撼泛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澡谭。 院中可真熱鬧愿题,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至崎脉,卻和暖如春拧咳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背囚灼。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工骆膝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灶体。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓阅签,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蝎抽。 傳聞我的和親對象是個殘疾皇子政钟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 排序算法 sort()方法,用于對數(shù)組排序 注意:該排序方法樟结,是根據(jù)數(shù)組中养交,每一個元素首字符的unicode編碼進(jìn)...
    晚_f2a9閱讀 196評論 0 0
  • 前言 面試題中有一些一般性的問題,通常是會問到的瓢宦。面試iOS應(yīng)聘者時碎连,切入點(diǎn)很重要,不同的切入點(diǎn)會導(dǎo)致不同的結(jié)果驮履,...
    雙子末音閱讀 199評論 0 0
  • 對象鱼辙,即一組數(shù)據(jù)的有規(guī)律,有屬性方法的集合玫镐,從構(gòu)成來看有兩組構(gòu)成方式:字面量倒戏,和New構(gòu)造, let singer...
    青木樹海閱讀 240評論 0 0
  • 1恐似、concat()方法峭梳,用于合并兩個或多個數(shù)組,返回一個全新的數(shù)組 2蹂喻、copyWithin()方法葱椭,從數(shù)組的指...
    熱心市民馮先生_80c2閱讀 161評論 0 0
  • 五、多重循環(huán) 在二重循環(huán)中口四,外層循環(huán)變量變化一次孵运,內(nèi)層循環(huán)變量變化整個 代碼: <!DOCTYPE html> ...
    默默_01cf閱讀 207評論 0 0