对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; } } |
如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码


机器瞎学/数据掩埋/模式混淆/人工智障/深度遗忘/神经掉线/计算机幻觉/专注单身二十五年
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
2009-11-07 javascript框架之继承机制2