<html>
    <head>
        <style>    
            textarea{
                width:800px;
                height:250px;
            }
        </style>
        <script>
            /**
            *Dom 类
            *存储Dom树节点
            */
            function Dom() {
                this.tag = "";
                this.attributes=[];// id class style name
                this.innerHtml = "";
                this.parent = "";
                this.children=[];
                this.num = 0;
                this.cssNums =[];
                this.each = function() {
                }
            }
            /**
            *HtmlParser类
            *解析html文档
            */
            function HtmlParser(html) {
                this.parse = function(html,pDom) {
                    var dom = new Dom();
                    // 生成节点编号
                    dom.num = 1;
                    // 获取节点标签
                    dom.tag = this.getTag(html);
                    // 获取节点属性
                    dom.attributes = this.getAttributes(html);
                    // 获取节点innerHtml
                    dom.innerHtml = this.getInnerHtml(html);
                    // 生成节点父亲
                    dom.parent = pDom;
                    // 生成节点孩子 ==>如果innerHtml中有孩子,生成孩子,否则结束
                    if(this.isExistNode(dom.innerHtml)) {
                        var nodes = this.splitNodes(dom.innerHtml);
                        for (var i=0;i < nodes.length;i++) {
                            var childDom = this.parse(nodes[i],dom);
                            dom.children.push(childDom);
                        }
                    }
                    return dom;
                };
                // 获取节点的标签
                this.getTag = function(html) {
                    var tag = "tag";
                    var tagStart = html.indexOf('<');
                    var spacePst = html.indexOf(' ',tagStart);
                    var rightPst = html.indexOf('>',tagStart);
                    var tagEnd = rightPst;
                    if (spacePst!=-1 && spacePst<rightPst) {
                        tagEnd = spacePst;
                    }
                    tag = html.substring(tagStart,tagEnd);
                    return tag;
                }
                // 获取节点的属性
                this.getAttributes = function(html) {
                    var attributes = "attributes";
                    return attributes;
                }
                // 获取节点的innerHtml
                this.getInnerHtml = function(html) {
                    var innerHtml = "innerHtml";
                    return innerHtml;
                }
                // 判断innerHtml 中是否有节点
                this.isExistNode = function (html) {
                    return false;
                }
                // 将innerHtml 分割成孩子节点数组,必须保证里面有节点才能调用该函数
                this.splitNodes = function (html) {
                    var nodes = [];
                    return nodes;
                }
            }
            // 主函数
            function main(){
                var html = document.getElementById("content");
                var htmlParser = new HtmlParser();
                var dom = htmlParser.parse(html,"");
                alert(dom.num + " " +dom.tag + " " + dom.attributes +" " +dom.innerHtml);
                document.getElementById("result").value = dom;
            }
        </script>
    </head>
    <body>
        <textarea id="content"></textarea>
        <input type="button" value="转换" onclick="main()"/>
        <textarea id="result"></textarea>
    </body>
</html>

最新文章

  1. 特征哈希(Feature Hashing)
  2. 转载 BCS 的好文章 1 - 怎么创建和使用BCS
  3. [QT]抄—影像显示实验
  4. Scala学习之: Hello Word!
  5. 伪命题:PHP识别url重写请求
  6. nginx 配置虚拟主机(支持php)
  7. SQL Server死锁的分析、处理与预防
  8. 【python】只执行普通除法:添加 from __future__ import division
  9. IE下全局对象报 脚本错误提示“对象不支持此属性或方法”解决方案
  10. JAVA入门[21]-Jedis操作redis示例
  11. REACT相关资料合集
  12. Vue系列之 =&gt; 路由匹配
  13. netty-socketio(一)之helloworld,与springboot整合
  14. 用 hashcat 破解 WIFI WPA2破解
  15. Modularizing your graphQL schemas
  16. 关闭win10 自动更新 及蓝屏解决办法
  17. 遍历GroupBox上的所有的textbox
  18. HTML项目总结
  19. bzoj3631 松鼠的新家
  20. shiro简单入门介绍

热门文章

  1. 【Jmeter】Jmeter聚合报告分析
  2. openstack开发环境搭建
  3. 隐藏时间表ribbon按钮
  4. oracle针对中文排序
  5. string.Format的困惑
  6. Software - (转)Winform 程序捕获全局异常
  7. 快速发现并解决maven依赖传递冲突
  8. SpringMVC中的常用注解
  9. Listbox 实现Item双击事件
  10. 约数和问题 (codevs2606 &amp;&amp; 洛谷2424)