how2j.cn

步骤 1 : 练习-表格排序   
步骤 2 : 答案-表格排序   

步骤 1 :

练习-表格排序

edit Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
点击表头,实现排序效果
<style> table{ border-collapse:collapse; width:90%; } tr{ border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: lightgray; height:35px; } td{ width:25%; text-align:center; } a{ text-decoration: none; color:skyblue; } </style> <script> var col = 0; var reverse = false; function sort(column){ if(column == col) reverse = !reverse; col = column; var tbody = document.getElementById("tbody"); //通过getElementsByTagName取出来是一个Collection var trsCollection = document.getElementsByTagName("tr"); //因为Collection没有自带的排序函数,所以需要转换为数组,利用数组自带的排序 var trs =new Array(); for (var i=1; i <trsCollection.length; i++) { trs.push(trsCollection[i]); } trs.sort(comparator); for (var i=0; i <trs.length; i++) { tbody.appendChild(trs[i]); } } function comparator(tr1,tr2){ var td1 = tr1.children[col].innerHTML; //取某一行的第col列中的内容 var td2 = tr2.children[col].innerHTML; if(reverse) return td1.localeCompare(td2); else return td2.localeCompare(td1); } </script> <table> <tbody id="tbody"> <tr > <td ><a href="javascript:void(0)" onclick="sort(0)">id</a></td> <td ><a href="javascript:void(0)" onclick="sort(1)">名称</a></td> <td ><a href="javascript:void(0)" onclick="sort(2)">血量</a></td> <td ><a href="javascript:void(0)" onclick="sort(3)">伤害</a></td> </tr> <tr > <td>1</td> <td>gareen</td> <td>340</td> <td>58</td> </tr> <tr > <td>2</td> <td>teemo</td> <td>320</td> <td>76</td> </tr> <tr > <td>3</td> <td>annie</td> <td>380</td> <td>38</td> </tr> <tr > <td>4</td> <td>deadbrother</td> <td>400</td> <td>90</td> </tr> </tbody> </table>


源代码
1. 双击选中单词 2. 三击选中整行 3. CTRL+F 查找 4. F8 全屏编辑,再次点击恢复
渲染中 渲染完成
效果
步骤 2 :

答案-表格排序

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法
查看本答案会花费5个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法
账号未激活 账号未激活,功能受限。 请点击激活
运行效果
<style> table{ border-collapse:collapse; width:90%; } tr{ border-bottom-style: solid; border-bottom-width: 1px; border-bottom-color: lightgray; height:35px; } td{ width:25%; text-align:center; } a{ text-decoration: none; color:skyblue; } </style> <script> var col = 0; var reverse = false; function sort(column){ if(column == col) reverse = !reverse; col = column; var tbody = document.getElementById("tbody"); //通过getElementsByTagName取出来是一个Collection var trsCollection = document.getElementsByTagName("tr"); //因为Collection没有自带的排序函数,所以需要转换为数组,利用数组自带的排序 var trs =new Array(); for (var i=1; i <trsCollection.length; i++) { trs.push(trsCollection[i]); } trs.sort(comparator); for (var i=0; i <trs.length; i++) { tbody.appendChild(trs[i]); } } function comparator(tr1,tr2){ var td1 = tr1.children[col].innerHTML; //取某一行的第col列中的内容 var td2 = tr2.children[col].innerHTML; if(reverse) return td1.localeCompare(td2); else return td2.localeCompare(td1); } </script> <table> <tbody id="tbody"> <tr > <td ><a href="javascript:void(0)" onclick="sort(0)">id</a></td> <td ><a href="javascript:void(0)" onclick="sort(1)">名称</a></td> <td ><a href="javascript:void(0)" onclick="sort(2)">血量</a></td> <td ><a href="javascript:void(0)" onclick="sort(3)">伤害</a></td> </tr> <tr > <td>1</td> <td>gareen</td> <td>340</td> <td>58</td> </tr> <tr > <td>2</td> <td>teemo</td> <td>320</td> <td>76</td> </tr> <tr > <td>3</td> <td>annie</td> <td>380</td> <td>38</td> </tr> <tr > <td>4</td> <td>deadbrother</td> <td>400</td> <td>90</td> </tr> </tbody> </table>


源代码
1. 双击选中单词 2. 三击选中整行 3. CTRL+F 查找 4. F8 全屏编辑,再次点击恢复
渲染中 渲染完成
效果


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2019-06-08 作业
587566sfadf



做了个用id排序。 拍好后的表格会闪现下就消失。不知道为什么啊。 代码用两种方法写了都会这样。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        table{
            width: 100%;
        }
        .r1 {
            color: #336699;
        }

        a {
            text-decoration: none;
        }

        td {
            border-bottom-style: solid;
            border-bottom-width: 1px;
            border-bottom-color: lightgray;
        }
    </style>
</head>
<body>
<div id="d1">
    <table id="atable">
        <tr class="r1">
            <td><a href="" onclick="pid()">id</a></td>
            <td><a href="" onclick="pmc()">名称</a></td>
            <td><a href="" onclick="pxl()">血量</a></td>
            <td><a href="" onclick="psh()">伤害</a></td>
        </tr>
    </table>
</div>

<script>
    var b1 = new Array(1, 'gareen', 340, 58);
    var b2 = new Array(2, 'teemo', 320, 76);
    var b3 = new Array(3, 'annie', 380, 38);
    var b4 = new Array(4, 'deadbrother', 400, 90);

    var ph = new Array();

    var zb = new Array(b1, b2, b3, b4);

    var bls = new Array();

    var atable = document.getElementById("atable");

    function pid() {

        /*var b11 = b1[0];
        var b21 = b2[0];
        var b31 = b3[0];
        var b41 = b4[0];*/

        bls.push(b1[0],b2[0],b3[0],b4[0]);
        bls.sort();
        console.log(bls);

        for (var i = 0; i < bls.length; i++) {
            if (bls[i] == b1[0]) {
                ph.push(b1);
            } else if (bls[i] == b2[0]) {
                ph.push(b2);
            } else if (bls[i] == b3[0]) {
                ph.push(b3);
            } else if (bls[i] == b4[0]) {
                ph.push(b4);
            }
        }
        // alert(ph);




        /*for (var i = 0;i<ph.length;i++){
             var tr = document.createElement("tr");
            atable.appendChild(tr);
            for (var j = 0;j< ph[i].length;j++){
                var td = document.createElement("td");
                var text = document.createTextNode(ph[i][j]);
                console.log(text);
                tr.appendChild(td);
                td.appendChild(text);
            }
        }*/
        function createTD(text) {
            var td = document.createElement("td");
            var text = document.createTextNode(text);
            td.appendChild(text);
            return td;
        }

        function createTR(texts) {
            var tr = document.createElement("tr");
           for (var i = 0;i<texts.length;i++){
               var td = createTD(texts[i]);
               tr.appendChild(td);
           }
           return tr;
        }


            for (var i = 0;i<ph.length;i++){
               var tr = createTR(ph[i]);
               atable.appendChild(tr);
            }



    }


</script>
</body>
</html>

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-05-01 交作业
歪脖树下自逍遥



用前面的js动态生成表格改的
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>使用js动态生成表格</title>
    </head>
    <body>
		<div id="title_"></div>
		<div id="table_"></div>
        <script type="text/javascript">
			var title_=document.getElementById("title_");
			var table_=document.getElementById("table_");
			var titles=["id "," 名称 "," 血量 "," 伤害"];
            var contents=[["1","gareen","340","58"],["2","teemo","320","76"],["3","annie","380","38"],["4","deadbrother","400","90"]];
			
			//生成表头
			var tr_=document.createElement("tr");//tr标签
			tr_.style.color="blue";
			for(var i=0;i<titles.length;i++){
				var td_=document.createElement("td");//td标签
				for(var j=0;j<contents.lenght;j++){
					contents[j].index=i;
				}
				var content_=titles[i];//获取数据用于生成到td里
				
				if(i==0) td_.style.color="red";
				td_.index=i;
				//绑定点击事件
				td_.onclick=function(){
					var tds=document.getElementById("title_").getElementsByTagName("td");
					for(var k=0;k<tds.length;k++){
						tds[k].style.color="blue";
					}
					this.style.color="red";
					//使用冒泡排序算法根据被点击的表头来重新排序数组contents
					for(var j=0;j<contents.length;j++){
						for(var k=0;k<contents.length-1-j;k++){
							if(contents[k][this.index]>contents[k+1][this.index]){
								var temp=contents[k];
								contents[k]=contents[k+1];
								contents[k+1]=temp;
								
							}
						}
					}
					//将原来生成的table去除
					table_.innerHTML="";
					
					//重新生成新的table
					for(var i=0;i<contents.length;i++){
						tr_=document.createElement("tr");//tr标签
						for(var j=0;j<contents[i].length;j++){
							var td_=document.createElement("td");//td标签
							var content_=contents[i][j];//获取数据用于生成到td里
							td_.appendChild(document.createTextNode(content_)); 
							tr_.appendChild(td_);
						}
						table_.appendChild(tr_);
					}
				}//end of the onclick
				
				td_.appendChild(document.createTextNode(content_)); 
				tr_.appendChild(td_);
				
			}
			title_.appendChild(tr_); 
			
			for(var i=0;i<contents.length;i++){
				tr_=document.createElement("tr");//tr标签
				for(var j=0;j<contents[i].length;j++){
					var td_=document.createElement("td");//td标签
					var content_=contents[i][j];//获取数据用于生成到td里
					td_.appendChild(document.createTextNode(content_)); 
					tr_.appendChild(td_);
				}
				table_.appendChild(tr_);
			}
			
             
        </script>
    </body>
</html>

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2019-03-03 我发现。。。。。。
2019-02-26 偶然发现。。
2018-12-11 href="javascript:void(0)"是什么意思啊
2018-11-04 关于localeCompare方法
2018-11-04 关于localCompare方法
2018-11-04 没积分的看过来
2018-09-11 appchild的功能
2018-08-22 请问如果我要交换两个引用类型的变量,要怎么交换呢?
2018-08-22 deadBrother
2017-11-16 用手写冒泡排序写了个答案,代码更精简,更容易读
2017-11-04 emm
2017-10-24 可以详细讲讲comparator的功能吗
2017-10-19 表格排序col,column等疑问
2017-08-14 求教
2017-08-09 站长,为什么点击一次是按升序排列,再点一次就是降序了?这不是每次调用函数时的reverse都是false吗?是因为reverse是全局对象吗?
2017-06-18 看看我这么写怎么样
2017-06-16 这有个bug
2017-04-18 这里的参数reverse是什么意思?
2017-04-02 关于替换的问题
2017-01-11 数组排序完成之后插入回tbody,为啥排序之前的数据被自动替换了?




提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 前端部分-HTML DOM-表格排序 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 1001964108
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图