问题:jQuery中遍历XML文件时候,获取子节点children不支持的情况(已解决)
问题描述:
今天在写一个基于 jquery 的读取xml文件的程序时候,需要遍历xml的节点。
代码片段如下:
function parse_xml_node(parent,result){
// result[$(parent)[0].nodeName] = {};
if( false == ($(parent)[0].nodeName in result)){
result[$(parent)[0].nodeName] = {};
}
// 获取子节点
var childs = $(parent)[0].children;
// 遍历子节点
$.each(childs,function(i,val){
if(i==0){
result[$(parent)[0].nodeName]['children'] = [];
}
result[$(parent)[0].nodeName]['children'].push({});
parse_xml_node($(this),result[$(parent)[0].nodeName]['children'][i]); // 函数递归
});
return result;
}
其中,parent 代表我需要遍历的父级节点,然后对获取到的子节点进行遍历,也就是 $.each(childs,function(){}) 的程序。
上述程序,采用递归的方式,一层层遍历子节点,直到遍历完成。
由于是在 Chrome 浏览器下开发的,所以在 Chrome 浏览器中,解析的是正确的,而在 IE 下却没有解析到子节点。
解决方法:
IE浏览器下,在上述程序 Line 8 地方打断点,发现:$(parent)[0] 没有 children 属性,度娘后也发现 IE 不支持 children,但是有 childNode 属性。
而 childNode 节点属性又分为 TextNode(文本节点)和 元素节点。
找到了问题的原因,就修改程序如下:
var childs = $(parent)[0].children || (function(){
// 兼容IE
var children = [];
$.each($(parent)[0].childNodes,function(i,e){
if (Object.prototype.toString.call(e) === "[object Element]") {
// 判断是元素节点
children.push(e);
}
});
return children;
})();
当程序运行时,获取到 children 属性,就返回 children的属性值,若没有,则 children 值为 undefined。执行 || 之后的程序。
如此改动后,问题解决。
注意:|| 在此处充当短路运算的作用。
问题:jQuery中遍历XML文件时候,获取子节点children不支持的情况(已解决)的更多相关文章
- opencv局限:cv::FileStorage读取中,xml文件的第一层节点不能超过4个
今天测试发现一个问题,cv::FileStorage读取中,xml文件的第一层节点不能超过4个. <?xml version="1.0"?> <opencv_st ...
- 遍历DOM树,获取子节点
获取子节点的方法有: 方法 说明 children() 选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点. find() 选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...
- jquery递归遍历xml文件,形成ul-li序列,生成树结构(使用了treeview插件)
treeview插件从这里获得,下载的文件中有demo,看demo文件夹里面的index.html文件就差不多知道如何使用该控件了,在我做的项目里用到的部分代码截图如下(在引用下面的js文件前要先引用 ...
- 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...
- jQuery ajax解析xml文件demo
解析xml文件,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息. 前端代码: <!doctype html> <html> <hea ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- 修改Android中strings.xml文件, 动态改变数据
有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...
- java中遍历实体类,获取属性名和属性值
方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...
- C#遍历XML文件动态加载菜单
通过遍历XML文件动态加载菜单,顺便利用WebBrowser控件实现一个简单的桌面浏览器 效果如下: 代码如下: XMLFile1.xml <?xml version="1.0&quo ...
随机推荐
- Codeforces 1108E (Array and Segments) 线段树
题意:给你一个长度为n的序列和m组区间操作,每组区间操作可以把区间[l, r]中的数字都-1,请选择一些操作(可以都不选),使得序列的最大值和最小值的差值尽量的大. 思路:容易发现如果最大值和最小值都 ...
- Ros问题汇总
1.ImportError: No module named beginner_tutorials.srv 解决: cd ~/catkin_ws $ source devel/setup.bash $ ...
- 简单的jQuery前端验证码校验
简单的jQuery前端验证码校验2 html; <!DOCTYPE html> <html lang="zh-cn"> <head> <m ...
- EZOJ #81
传送门 分析 每次拿a中最大的去匹配b中最小的 至于原因画个图感性思考一下就可以啦 代码 #include<iostream> #include<cstdio> #includ ...
- EZOJ #78
传送门 分析 AC自动机板子题qwq 不过似乎可以哈希(因为所有模式串的长度相同,所以哈希乱搞就可以) 代码 #include<iostream> #include<cstdio&g ...
- 1003 NOIP 模拟赛Day2 城市建设
题面不好找放一个吧. Description 描述 在有$N$个地级市的H省,政府为了城市开发建设,决定先修路,后造房子,以吸引外来人员.一开始每个城市中有$b_i$个住户,而在两个城市$u,v$之间 ...
- CF 1025C Plasticine zebra
昨晚忘记判只有一个字符的情况fst了呜呜呜 挺有趣的题,昨晚连刚带猜弄出结论 考虑答案的取值,最优答案可能是一个后缀,或者是一个前缀,或者是一个后缀加上前缀 那么翻转之后最优答案的可选值就有了1的前缀 ...
- cakephp目录结构
- Mat 类的内存管理
使用 Mat 类,内存管理变得简单,不再像使用 IplImage 那样需要自己申请和释放内存.虽然不了解 Mat 的内存管理机制,也无碍于 Mat 类的使用,但是如果清楚了解 Mat 的内存管理,会更 ...
- 前端(HTML/CSS/JS)-JavaScript编码规范
1. 变量命名 (1)变量名不应以短巧为荣 左边的变量名都不太清楚,代码的扩展性不好,一旦代码需要加功能的话,就容易出现obj1.obj2.obj3这种很抽象的命名方式.所以一开始就要把变量的名字起得 ...