IE的Xpath 获取单一节点

 var xmlDom = getXMLDOM(xmlStr);//调用之前写好的方法获得XMLDOM对象
// var node = xmlDom.selectSingleNode("root/user"); //获取单一节点
// alert(node.firstChild.nodeValue);
// var node = xmlDom.selectSingleNode("root/user/text()"); //text()可以获取节点内的值
// alert(node.nodeValue); var node = xmlDom.selectSingleNode("//user[1]"); //双斜杠可以获取不关心层次的第一个user
alert(node.xml);
var node = xmlDom.selectSingleNode("root/user[@idp=5]");
//通过唯一属性找到user节点 alert(node.xml); // var nodes = xmlDom.selectNodes("root/user");
// alert(nodes[1].xml)

下面是非IE 和IE 的Xpath 获取单个节点,兼容方法

    //做兼容,单个节点
function selectSingleNode(xmlDom, xpath) {
var node = null;
//W3C
if (typeof xmlDom.evaluate != "undefined") {
/*此处需要将W3C标准,火狐等浏览器下的xpath【数字】加1,从而达到与IE xpath统一*/
var patten = /\[(\d+)\]/g;
var flag = xpath.match(patten);
var num = 0;
if (flag !== null) {
num = parseInt(RegExp.$1) + 1;
xpath = xpath.replace(patten, '[' + num + ']');
} var eva = new XPathEvaluator();
var result = eva.evaluate(xpath, xmlDom, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null); //单一节点
if (result !== null) {
node = result.singleNodeValue;
}
}
else if (typeof xmlDom.selectSingleNode != "undefined") {//IE node = xmlDom.selectSingleNode(xpath);
}
return node; }

下面是获取集合节点的兼容方法,更单个节点类似。使用iterateNext()方法,将eva.evaluate返回的集合放入数组,以便调用

   //跨浏览器,做个节点集合
function selectSingleNodes(xmlDom, xpath) {
var nodes = null;
//W3C
if (typeof xmlDom.evaluate != "undefined") {
/*此处需要将W3C标准,火狐等浏览器下的xpath【数字】加1,从而达到与IE xpath统一*/
var patten = /\[(\d+)\]/g;
var flag = xpath.match(patten);
var num = 0;
if (flag !== null) {
num = parseInt(RegExp.$1) + 1;
xpath = xpath.replace(patten, '[' + num + ']');
}
var eva = new XPathEvaluator();
var result = eva.evaluate(xpath, xmlDom, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); //节点集合
var node = null;
//下一跳节点 var nodes = [];
while ((node = result.iterateNext()) !== null) {
nodes.push(node); }
}
else if (typeof xmlDom.selectNodes != "undefined") {//IE nodes = xmlDom.selectNodes(xpath);
}
return nodes; }
// alert(serializerXML(selectSingleNodes(xmlDom, "root/user")));
alert(serializerXML(selectSingleNodes(xmlDom, "root/user")[1])); </script>

JavaScript 【跨浏览器XPath,做个兼容】的更多相关文章

  1. JavaScript跨浏览器绑定事件函数的优化

    JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...

  2. JavaScript跨浏览器处理事件以及相关对象

    主流的浏览器和IE浏览器在处理事件和事件对象上是有所区别的,我们一般会通过EventUtil进行封装,这样,就可以正常的跨浏览器处理事件了,本文的主要内容总结自<JavaScript高级程序设计 ...

  3. javascript跨浏览器事件对象类库

    一.前言 学习了javascript事件后,个人总结归纳了跨浏览器事件对象类库,方便以后使用,现分享给大家. 二.事件对象封装 将对浏览器事件对象的操作封装成eventObject.js方便调用 // ...

  4. javascript跨浏览器操作xml

    //跨浏览器获取xmlDom function getXMLDOM(xmlStr) { var xmlDom = null; if (typeof window.DOMParser != 'undef ...

  5. Javascript跨浏览器的事件对象

    一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...

  6. 封装常用的Javascript跨浏览器方法

    var EventUntil={ // 跨浏览器的添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListen ...

  7. javascript 跨浏览器事件处理

    <div id="myDiv" style="width:100px; height:100px; border:1px solid #f00;"> ...

  8. JavaScript跨浏览器事件处理

    var EventUtil = { getEvent: function(event){ return event ? event : window.event; }, getTarget: func ...

  9. 原生javascript跨浏览器常用事件处理

    var eventUntil = {             getEvent: function (event) {//获取事件                 return event ? eve ...

随机推荐

  1. Android学习总结——实现Home键功能

    实现Home键功能简而言之就是回到桌面,让Activity不销毁,程序后台运行. 实现方法: Intent intent= new Intent(Intent.ACTION_MAIN); intent ...

  2. Nginx学习之四-Nginx进程同步方式-自旋锁(spinlock)

    自旋锁简介 Nginx框架使用了三种消息传递方式:共享内存.套接字.信号. Nginx主要使用了三种同步方式:原子操作.信号量.文件锁. 基于原子操作,nginx实现了一个自旋锁.自旋锁是一种非睡眠锁 ...

  3. 使用公用表表达式(CTE)

    本文来自:http://blog.csdn.net/songjie521/article/details/3321030 通用表表达式(CTEs)是SQL Server 2005的一项新功能.它们类似 ...

  4. winform —— 对话框和流及打印

    对话框:  注意引用using System.IO; showdialog();显示对话框,返回一个dialogresult的枚举类型 colorDialog:color属性,用来获取颜色 folde ...

  5. 《JavaScript 闯关记》之表达式和运算符

    表达式 表达式是由数字.运算符.数字分组符号(如括号).自由变量和约束变量等以能求得数值的有意义排列方法所得的组合.JavaScript 表达式主要有以下几种形式: 原始表达式:常量.变量.保留字. ...

  6. 【常用小命令】解决windows下有些文件文件名识别不了导致删除不了的问题

    在百度上找的解决方案哈,只为自己存档一份. 因为发现现在从csdn上下载的文件都是“.pdf_”格式,下载2个文件,将一个文件格式改成 “.pdf”,另一个文件就扔回不了回收站了, 所以没有办法就找各 ...

  7. SpringMVC+JPA+Hibernate配置

    首先,Spring配置文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns=" ...

  8. C# 静态类与非静态类、静态成员的区别分析

    静态类静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量.在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化 ...

  9. Android studio教程:[4]真机测试

    有了Android studio这么好用的软件,自然要有一部不错的安卓手机,然后在真机上测试自己的程序,那样才能更好的发现程序中存在的问题,毕竟模拟器不是真正的手机嘛. 工具/原料 Android s ...

  10. 数据库监控[Z]

    --查看表锁 select * from sys.v_$sqlarea where disk_reads>100    --监控事例的等待 select event,sum(decode(wai ...