JavaScript 【跨浏览器XPath,做个兼容】
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,做个兼容】的更多相关文章
- JavaScript跨浏览器绑定事件函数的优化
JavaScript作为一门基于事件驱动的语言(特别是用在DOM操作的时候),我们常常需要为DOM绑定各种各样的事件.然而,由于低版本的IE的不给力,在绑定事件和移除事件监听上都与众不同,我们常常需要 ...
- JavaScript跨浏览器处理事件以及相关对象
主流的浏览器和IE浏览器在处理事件和事件对象上是有所区别的,我们一般会通过EventUtil进行封装,这样,就可以正常的跨浏览器处理事件了,本文的主要内容总结自<JavaScript高级程序设计 ...
- javascript跨浏览器事件对象类库
一.前言 学习了javascript事件后,个人总结归纳了跨浏览器事件对象类库,方便以后使用,现分享给大家. 二.事件对象封装 将对浏览器事件对象的操作封装成eventObject.js方便调用 // ...
- javascript跨浏览器操作xml
//跨浏览器获取xmlDom function getXMLDOM(xmlStr) { var xmlDom = null; if (typeof window.DOMParser != 'undef ...
- Javascript跨浏览器的事件对象
一.跨浏览器的事件对象 var EventUtil = { ///添加事件 addHandler: function (element, type, handler) { if (element.ad ...
- 封装常用的Javascript跨浏览器方法
var EventUntil={ // 跨浏览器的添加事件方法 addHandler:function(element,type,handler){ if(element.addEventListen ...
- javascript 跨浏览器事件处理
<div id="myDiv" style="width:100px; height:100px; border:1px solid #f00;"> ...
- JavaScript跨浏览器事件处理
var EventUtil = { getEvent: function(event){ return event ? event : window.event; }, getTarget: func ...
- 原生javascript跨浏览器常用事件处理
var eventUntil = { getEvent: function (event) {//获取事件 return event ? eve ...
随机推荐
- hdu 1078 FatMouse and Cheese 记忆化dp
只能横向或竖向走...一次横着竖着最多k步...不能转弯的.... 为毛我的500+ms才跑出来... #include<cstdio> #include<iostream> ...
- 最逼近Mac OS的Linux系统 -- Elementary OS
也不知道有多少人听说过Elementary OS?elementary Project 最开始只有一个 elementary 主题,之后延伸出了很多项目,形成了 elementary Project ...
- Lua多重继承
http://blog.csdn.net/ssihc0/article/details/7742421 代码收藏了,以后用的到 --多重继承 local function search(k,plist ...
- Struts2使用Interceptor实现权限控制的应用实例详解
Struts2使用Interceptor实现权限控制的应用实例详解 拦截器:是Struts2框架的核心,重点之重.因此,对于我们要向彻底学好Struts2.0.读源码和使用拦截器是必不可少的.少说了. ...
- Tomcat 的三种(bio,nio.apr) 高级 Connector 运行模式
tomcat的运行模式有3种.修改他们的运行模式.3种模式的运行是否成功,可以看他的启动控制台,或者启动日志.或者登录他们的默认页面http://localhost:8080/查看其中的服务器状态. ...
- 记录ASP.NET页面表单初始状态(主要是为了前台可以根据这个判断页面是否变动了)
把页面表单状态记录到HiddenField中. 这里只提供后台代码, 前台逻辑根据需求自由定义. 存放值的ViewState: protected Dictionary<string, stri ...
- 清理SQL数据库日志
Use DBSelect NAME,size From sys.database_files ALTER DATABASE DB SET RECOVERY SIMPLE WITH NO_WAIT AL ...
- oracle取分组的前N条数据
select * from(select animal,age,id, row_number()over(partition by animal order by age desc) row_num ...
- ios 项目被拒绝各种理由
. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by ...
- express框架目录结构
. ├── app.js ├── bin │ └── www ├── node_modules │ ├── body-parser │ ├── cookie-parser │ ├── ...