• 对XML元素操作的一些注意点


    在IE中,如果版本少于9,那么不能直接设置自定义属性,必须通过setAttribute方法才行,其他浏览器没有此麻烦。

    //比如Sizzle这段代码,在IE的XML中会出错,不能直接el.aaa = "bbb"
                if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
                    count = 0;
    
                    for ( node = parent.firstChild; node; node = node.nextSibling ) {
                        if ( node.nodeType === 1 ) {
                            node.nodeIndex = ++count;
                        }
                    } 
    
                    parent[ expando ] = doneName;
                }
    

    XML的getElementsByTagName,如果标签名存在命名空间(换言之有“:”隔开),opera, chrome, safari是找不到,firefox与IE可以。这时就需要用getElementsByTagNameNS与lookupNamespaceURI这两个生僻的API了。下面是我寻找tagName的方法:

            function getElementsByTagName(tagName, els, flag_xml) {
                var method = "getElementsByTagName", elems = [], uniqResult = {}, prefix
                if(flag_xml && tagName.indexOf(":") > 0 && els.length && els[0].lookupNamespaceURI){
                    var arr = tagName.split(":");
                    prefix = arr[0];
                    tagName = arr[1];
                    method = "getElementsByTagNameNS";
                    prefix = els[0].lookupNamespaceURI(prefix);
                }
                switch (els.length) {
                    case 0:
                        return elems;
                    case 1:
                        //在IE67下,如果存在一个name为length的input元素,下面的all.length返回此元素,而不是长度值
                        var all =  prefix ? els[0][method](prefix,tagName) : els[0][method](tagName)
                        for(var i = 0, ri = 0, el; el = all[i++];){
                            if(el.nodeType === 1){//防止混入注释节点
                                elems[ri++] = el
                            }
                        }
                        return elems;
                    default:
                        for(i = 0, ri = 0; el = els[i++];){
                            var nodes = prefix ? el[method](prefix,tagName) : el[method](tagName)
                            for (var j = 0, node; node = nodes[j++];) {
                                var uid = dom.getUID(node);
                                if (!uniqResult[uid]) {
                                    uniqResult[uid] = elems[ri++] = node;
                                }
                            }
                        }
                        return elems;
                }
            }
    
    
  • 相关阅读:
    上有传参下传json的接口调用
    通过群号,获取到群成员信息,下载头像到指定文件夹
    django模型 之 Meta
    k8s 日志的收集
    systemctl 管理服务
    安装JumpServer
    1 nginx的配置详解
    十六 RBAC
    python3 与linux间的小知识
    解决问题:OSError: mysql_config not found
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2238629.html
Copyright © 2020-2023  润新知