zoukankan      html  css  js  c++  java
  • 是否是有效的dom节点--轮子代码

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8"/>
        <title>是否是有效的dom节点</title>
        <script type="text/javascript">
            //是否是节点(body有效)
            function isNode(elem) {
                var ts = Object.prototype.toString;
                var reg = /^([object HTML).*?(Element])$/;
                var str = ts.call(elem);
    
                //IE8下body会识别成[object Object]
                if (reg.test(str)
                        || (elem !== undefined
                                && elem !== null
                                && elem.nodeName !== undefined
                                && elem.nodeName !== '#text'
                                && elem.nodeName !== '#document')) {
                    return true;
                }
    
                return false;
            }
        </script>
    </head>
    <body>
    <ul>
        <li>
            列表节点
        </li>
    </ul>
    <h4>单测结果输出:</h4>
    <script type="text/javascript">
    
        //简单测试框架
        function test(testArr, expectArr, explain) {
            var tStr;
            for (var i = 0, len = testArr.length; i < len; i++) {
    
    
                if(explain && explain[i]){
                    tStr = explain[i] + ' -> ' + expectArr[i] + ':';
                }
    
                if (isNode(testArr[i]) === expectArr[i]) {
                    tStr += '成功';
                } else {
                    tStr += '失败';
                }
    
    
                document.write(tStr + '<br />');
            }
        }
    
        // 对验证的说明
        var explain;
        //预期结果
        var expect;
        var ul = document.getElementsByTagName('ul')[0];
        var childNodes = ul.childNodes;
        if (childNodes.length == 3) {
            expect = [false, true, false];
            explain = [
                '标准浏览器下childNodes获取的换行文本节点',
                '标准浏览器下childNodes获取的Dom节点',
                '标准浏览器下childNodes获取的换行文本节点'
            ];
        } else {
            expect = [true];
            explain = ['IE下childNodes获取的Dom节点'];
        }
        test(childNodes, expect, explain);
    
        document.write('------------------------<br />');
    
        var testArr =
                [
                    document,
                    window,
                    document.body,
                    undefined,
                    null,
                    true,
                    false,
                    '' ,
                    0,
                    2 / 0,
                    new Number(3),
                    'str',
                    new String('str'),
                    new String('')
                ];
        expect =
                [
                    false,
                    false,
                    true,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false,
                    false
                ];
        // 对验证的说明
        explain = [
            'document',
            'window',
            'document.body',
            'undefined',
            'null',
            'true',
            'false',
            '空字符串',
            '数字0',
            'NaN,如2/0',
            'new Number(3)',
            'str',
            'new String("str")',
            'new String("")'
        ];
        test(testArr, expect, explain);
        document.write('------------------------<br />');
    
        //这种变态构造就管不了了
        test([
            {nodeName: 'DIV'}
        ], [false]);
    
    </script>
    </body>
    </html>
  • 相关阅读:
    技术实践 | 聊聊网易云信的信令网络库实践
    打破传统降噪技术 看网易云信在语音降噪的实践应用
    聊聊前端日志库在 SaaS 产品中的应用与设计
    WebRTC 系列之音频会话管理
    简单五步,轻松构建本土「Clubhouse」
    网易云信服务监控平台实践
    基于 Elasticsearch 的数据报表方案
    基于 WebRTC 实现自定义编码分辨率发送
    Python 设计模式—原型模式
    网络层—简单的面试问题
  • 原文地址:https://www.cnblogs.com/longze/p/3673594.html
Copyright © 2011-2022 走看看