敲点JavaScript代码

1. DOM DEMO-表格的行排序

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DEMO~DEMO</title>
<style type="text/css">

</style>

</head>
<body>
    <table id="tab" border=1>
        <thead>
            <tr>
                <th>Name</th>
                <th>Age</th>
            </tr>
        </thead>
        <tbody>
            <tr><td>111</td><td>1</td></tr>
            <tr><td>888</td><td>7</td></tr>
            <tr><td>333</td><td>3</td></tr>
            <tr><td>555</td><td>6</td></tr>
        </tbody>
    </table>
    <script type="text/javascript">
    /*
     * 根据指定表格每行第n的单元格的值,对第一个<tbody>中的行排序,
     * 如果存在comparator函数则使用它,否则按字母表顺序比较。
     */
    function sortrows(table, n, comparator){
        var tbodys = table.tBodies[0];
        var rows = tbodys.getElementsByTagName("tr"); //tbody中的所有行
        rows = Array.prototype.slice.call(rows, 0); //真实数组中的快照

        rows.sort(function(row1, row2){
            var ceil1 = row1.getElementsByTagName("td")[n]; //获得第n个单元格
            var ceil2 = row2.getElementsByTagName("td")[n];
            var val1 = ceil1.textNode || ceil1.innerText; //获得文本内容

            var val2 = ceil2.textNode || ceil2.innerText; //比较
            if(comparator)
                return comparator(val1, val2);
            if(val1 < val2) return -1;
            else if(val1 > val2) return 1;
            else return 0;
        });
        //在tbody中按它们的顺序进行添加
        for(var i=0; i<rows.length; i++)
            tbodys.appendChild(rows[i]);
    }
    /*
     * 查找表格的<th>元素,让它们可点击,以便点击列标题,按该列对行排序
    */
    function makeSortable(table){
        var headers = table.getElementsByTagName("th");
        for(var i=0; i<headers.length; i++){
            (function(n){
                headers[i].onclick = function(){
                    sortrows(table, n);

                };
            }(i));
        }
    }

    var tab = document.getElementById("tab");
    makeSortable(tab);
    </script>
</body>
</html>

2. 生成子目录

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DEMO~DEMO</title>
<style type="text/css">
    #TOC {border:solid black 1px; margin:10px; padding:10px}
    .TOCEntry {font-family:sans-serif;}
    .TOCEntry a {text-decoration:none;}
    .TOCLevel1 {font-size:16px; font-weight:bold;}
    .TOCLevel2 {font-size:12px; margin-left:.5in;}
    .TOCSectNum:after {content: ":";} /*表示每个段编号之后都有一个冒号和空格符。*/
    .TOCSectNum {display:none;}
</style>

</head>
<body>
    <div id="TOC">

    </div>
    <h1>h1</h1>
    <h2>h2</h2>
    <h3>h3</h3>
    <h4>h4</h4>
    <h5>h5</h5>
    <h6>h6</h6>
    <script type="text/javascript">
        (function(){
            //查找TOC元素,如果不存在,则在文档中创建一个
            var toc = document.getElementById("TOC");
            if(!toc){
                toc = document.createElement("div");
                toc.id = "TOC";
                document.body.insertBefore(toc,document.body.firstChild);
            }
            //查找所有的标题元素
            var headings;
            if(document.querySelectAll){
                document.querySelectAll("h1,h2,h3,h4,h5,h6");
            } else {
                headings = findHeadings(document.body, []);
            }

            //递归遍历document.body,查找标题元素
            function findHeadings(root, sects){
                for(var c=root.firstChild; c!=null; c=c.nextSibling){
                    if(c.nodeType !== 1) continue;
                    if(c.tagName.length == 2 && c.tagName.charAt(0) == "H"){
                        sects.push(c);
                    } else {
                        findHeadings(c,sects);
                    }
                }
                return sects;
            }

            //初始化一个数组来保持跟踪章节号
            var sectionNumbers = [0,0,0,0,0,0];

            //循环已找到的标题元素
            for(var h=0; h<headings.length; h++){
                var heading = headings[h];
                //跳过在TOC容器中的标题元素
                if(heading.parentNode == toc) continue;

                //判断标题级别
                var level = parseInt(heading.tagName.charAt(1));
                if(isNaN(level) || level<1 || level>6) continue;

                //对于该标题级别增加sectionNumbers对应的数字,重置所以标题比它级别低的数字为零
                sectionNumbers[level-1]++;
                for(var i=level; i<6; i++)
                    sectionNumbers[i] = 0;

                //将所有标题级别的章节组合产生一个章节号,如2.3.1
                var sectionNumber = sectionNumbers.slice(0,level).join(".");

                //为标题级别增加章节号,把数组放在<span>中,使其可以用样式修饰
                var span = document.createElement("span");
                span.className = "TOCSectNum";
                span.innerHTML = sectionNumber;
                heading.insertBefore(span, heading.firstChild);

                //用命名的锚点将标题包起来,以便为它增加链接
                var anchor = document.createElement("a");
                anchor.name = "TOC"+sectionNumber;
                heading.parentNode.insertBefore(anchor,heading);
                anchor.appendChild(heading);

                //现在为该节点创建一个链接
                var link = document.createElement("a");
                link.href = "#TOC" + sectionNumber; //链接的目标地址
                link.innerHTML = heading.innerHTML; 

                //将链接地址放在一个div中,div用基于级别名字的样式修饰
                var entry = document.createElement("div");
                entry.className = "TOCEntry TOCLevel"+level;
                entry.appendChild(link);

                toc.appendChild(entry);
            }
        }());

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

时间: 2024-11-26 12:31:24

敲点JavaScript代码的相关文章

【原创】如何管理你的 Javascript 代码

今天不聊技术的问题,咱们来聊聊在前端开发中如何管理好自己的 Javascript 代码.首先,咱们先来说说一般都有哪些管理方式?我相信 seajs.requirejs 对于前端开发者而言都不陌生,不错它们都是前端代码模块化开发的利器,显然以模块化的方式去管理我们的 Javascript 代码,是很不错的选择. 不过今天咱不谈模块化开发,因为上面的两个工具已经做得很好了,只要到他们的官方网站找到相应的文档资料,认真学习,不需太多时日你也能掌握模块化开发了.今天咱们要谈的是在不依赖模块管理工具的前提

如何管理你的 Javascript 代码

今天不聊技术的问题,咱们来聊聊在前端开发中如何管理好自己的 Javascript 代码.首先,咱们先来说说一般都有哪些管理方式?我相信  seajs . requirejs  对于前端开发者而言都不陌生,不错它们都是前端代码模块化开发的利器,显然以模块化的方式去管理我们的 Javascript 代码,是很不错的选择. 不过今天咱不谈模块化开发,因为上面的两个工具已经做得很好了,只要到他们的官方网站找到相应的文档资料,认真学习,不需太多时日你也能掌握模块化开发了.今天咱们要谈的是在不依赖模块管理工

FineUI(专业版)实现百变通知框(无JavaScript代码)!

曾经,有网友抱怨FineUI中连个通知框都没有,当用户进行某个操作成功时给个右下角的提示很不方便. 强大的设置参数 现在,FineUI(专业版)提供了强大的通知框机制,一个小小的通知框居然有多达 16 种不同的设置,可见威力之强大. 下面通过一张图片来简单概括一下: 1. 模式或者非模式对话框2. 消息图标可显示(消息.警告.问题.错误.成功),也可隐藏3. 正在加载图片可显示隐藏4. 消息正文可自定义5. 对话框标题可自定义6. 关闭图标可显示隐藏7. 标题栏可拖动8. 标题栏可隐藏9. 弹出

编写简洁的 JavaScript 代码

作者:尹锋链接:https://www.zhihu.com/question/20635785/answer/223515216来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 避免使用 js 糟粕和鸡肋 这些年来,随着 HTML5 和 Node.js 的发展,JavaScript 在各个领域遍地开花,已经从"世界上最被误解的语言"变成了"世界上最流行的语言".但是由于历史原因,JavaScript 语言设计中还是有一些糟粕和鸡肋,比如

代码示例:一些简单技巧优化JavaScript编译器工作详解,让你写出高性能运行的更快JavaScript代码

告诉你一些简单的技巧来优化JavaScript编译器工作,从而让你的JavaScript代码运行的更快.尤其是在你游戏中发现帧率下降或是当垃圾回收器有大量的工作要完成的时候. 单一同态: 当你定义了一个两个参数的函数,编译器会接受你的定义,如果函数参数的类型.个数或者返回值的类型改变编译器的工作会变得艰难.通常情况下,单一同态的数据结构和个数相同的参数会让你的程序会更好的工作. function example(a, b) { // 期望a,b都为数值类型 console.log(++a * +

javascript代码放置位置对程序的影响

在编写html文档时,javascript可以放置的位置有两个地方<head>或者<body>,但是放置的地方,会对 JavaScript 代码的正常执行会有一定影响.由于 HTML 文档是由浏览器从上到下依次载入的,javascript的放置位置主要影响获取网页元素.如果你的代码中包含获取网页元素的代码例如document.getElementById(),那么你需要确保你的javascript代码要在你想要获取的元素的位置之后.如过在你想要获取的元素的位置之前调用这个些代码,由

javascript代码规范 [转]

原文:http://www.css88.com/archives/5366 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域.这一举措可防止全局命名空间被污染. IIFE 还可确保你的代码不会轻易被其它全局命名空间里的代码所修改(i.e. 第三方库,window 引用,被覆盖的未定义的关键字等等). 不推荐 1 var x = 10, 2 y = 100; 3 4 // Dec

可进行JavaScript代码测试与调试的12个网站

概述:JavaScript是网站前端开发最为重要的一门编程语言,本文收集了能够在线测试与调试JavaScript代码的12个网站 1.JS Bin JS bin是一个为JavaScript和CSS爱好者们提供特定情况下的代码片段测试的网站.它可以让你和你的同伴合作调试代码.你可以在这里编辑和测试JavaScript和HTML代码,一旦你觉得满意,可以把相关的网址发送给你的同伴,以获取他们的看法和帮助. 2.JS Nice JS Nice 是一个用于JavaScript的反代码混淆以及反极简主义的

深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)

才华横溢的Stoyan Stefanov,在他写的由O’Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情.具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以