javascript - 关于排序的一个问题
巴扎黑
巴扎黑 2017-04-11 13:11:57
[JavaScript讨论组]
        var li = document.getElementsByTagName('li');
         function bubbleSort(){
             for(var i = 0;i < li.length-1;i++){
                 for(var j = 0;j < li.length-i-1;j++){
                     if(parseInt(li[j].innerHTML) > parseInt(li[j+1].innerHTML)){
                         swap(j,j+1);
                     }
                 }        
             }
             return li;
         }
         function swap(beforeIndex,afterIndex){
             var item = li[beforeIndex];
             li[beforeIndex] = li[afterIndex];
             li[afterIndex] = item;
         }
         function ff(){
             var aa = bubbleSort();
             for(var i = 0;i < aa.length;i++){
                 document.write(aa[i].innerHTML);
             }
         }

使用js往ul中添加li,然后使用冒泡排序,将ff函数绑定在一个按钮上,但是结果不正确,请问问题出在哪?
假如li里分别是5,4,3,2,1最后只输出5

巴扎黑
巴扎黑

全部回复(2)
大家讲道理
  1. 这个代码的作用域十分混乱,很容易出现变量互相影响的问题。

  2. 如果要修改这段代码仅仅达到你所需要而目的,首先需要改这个函数:

    function swap(beforeIndex,afterIndex){
        var item = li[beforeIndex].innerHTML;
        li[beforeIndex].innerHTML = li[afterIndex].innerHTML;
        li[afterIndex].innerHTML = item;
    }

li[i]是dom元素,li[1] = li[2]这种操作是无效的。

然后是最后的document.write(aa[i].innerHTML),因为执行的时候文档流已经关闭,所以每次使用document.write都会清空文档,因此只会显示最后的aa[i].innerHTML,建议改成console.log或者append等方式。

高洛峰

你应该贴出绑定函数的是怎么写的,有可能是闭包问题

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号