按字符串顺序重新排序DOM节点

按字符串顺序重新排序DOM节点

题目

<!--练习 对于一个已有的HTML结构:
1、Haskell
2、JavaScript
3、Python
4、Ruby
5、Scheme
-->
<!-- HTML结构 -->
<ol id="test-list">
    <li class="lang">Scheme</li>
    <li class="lang">JavaScript</li>
    <li class="lang">Python</li>
    <li class="lang">Ruby</li>
    <li class="lang">Haskell</li>
</ol>

答案

// sort list:
var root = document.getElementById('test-list');
var list = document.getElementsByClassName('lang');
console.log(list);
for(var i=0;i<list.length;i++){
for(var j=0;j<list.length-1;j++){
if(list[j].innerText>list[j+1].innerText){
root.insertBefore(list[j+1], list[j]);
}
}
}
console.log(list[0].innerText);
// 测试:
;(function () {
    var
        arr, i,
        t = document.getElementById('test-list');
    if (t && t.children && t.children.length === 5) {
        arr = [];
        for (i=0; i<t.children.length; i++) {
            arr.push(t.children[i].innerText);
        }
        if (arr.toString() === ['Haskell', 'JavaScript', 'Python', 'Ruby', 'Scheme'].toString()) {
            console.log('测试通过!');
        }
        else {
            console.log('测试失败: ' + arr.toString());
        }
    }
    else {
        console.log('测试失败!');
    }
})();

分析

思路一

通过Class的名字获取列表后进行排序,然后使用appendChild设置回去
但是行不通

思路二

通过冒泡算法,每次比较出最小,然后使用appendChild设置到最后,还是不通

思路三

通过两两比较,再通过一个insertBefore,交换在Dom树中的位置

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值