鍍金池/ 問答/HTML/ 模擬隊列問題不知道哪出bug了

模擬隊列問題不知道哪出bug了

我的思路是這樣,一個數(shù)組保存隊列,每次進入彈出對數(shù)組操作,然后清空html的隊列元素,再用隊列數(shù)組重新渲染。
求大佬調(diào)試:)
https://codepen.io/xyj/pen/Pe...

html:

    <input type="text" name="" id = "ipt">
    <button id = "ipt_left" onclick = "ipt_left()">左側(cè)入</button>

js:

var list = [];
function ipt(){
    var x = document.getElementById("ipt").value;
    return x;
}

function ipt_left(){
    var x = ipt();
    list.unshift(x);
    remove();
    render();
}

function render(){
    for (var i = 0; i < list.length; ++i){
        var div = document.createElement('div');
        div.className = "item";
        div.innerHTML = list[i];
        div.style.display = "inline-block";
        div.style.backgroundColor = "#e83423";
        div.style.margin = "10px";
        div.style.width = "50px";
        div.style.height = "50px";
        div.style.color = "#fff";
        div.style.fontSize = "40px";
        div.style.textAlign = "center";
        document.getElementById("queue").appendChild(div);
    }
}

function remove(){
    var divs = document.getElementsByClassName("item");
    console.log(divs);
    console.log(list);
    for (var i = 0; i < divs.length; ++i){
        divs[i].parentNode.removeChild(divs[i]);
    }
}

效果圖:
開始兩個還是好的
圖片描述

然后就開始崩了
圖片描述

回答
編輯回答
淡墨

簡單看了下,提幾個建議:

  1. remove函數(shù)那里,直接暴力empty清空不就得了么,為什么要循環(huán)刪除?你循環(huán)的時候,divs的length是在變的,但是你的i并沒變(一直在加),所以,這個刪的是有可能不準的。。。
  2. 插前插后可以用Element.insertAdjacentElement(),指定個方向就好,不用每次都清空重構(gòu)。render也是同樣的。
  3. div那么多行內(nèi)樣式為啥不寫個CSS類出來……
  4. input可以考慮下檢測下分隔符,然后可以一次插多個元素,這時再for
2017年8月13日 16:56