问题描述:

今天在写一个基于 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不支持的情况(已解决)的更多相关文章

  1. opencv局限:cv::FileStorage读取中,xml文件的第一层节点不能超过4个

    今天测试发现一个问题,cv::FileStorage读取中,xml文件的第一层节点不能超过4个. <?xml version="1.0"?> <opencv_st ...

  2. 遍历DOM树,获取子节点

    获取子节点的方法有:  方法  说明  children()  选取子节点,可以带过滤参数.但只能选择子节点,不能选择孙子节点.  find()  选取子节点,可以带过滤参数.可以选择子节点及孙子节点 ...

  3. jquery递归遍历xml文件,形成ul-li序列,生成树结构(使用了treeview插件)

    treeview插件从这里获得,下载的文件中有demo,看demo文件夹里面的index.html文件就差不多知道如何使用该控件了,在我做的项目里用到的部分代码截图如下(在引用下面的js文件前要先引用 ...

  4. 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】

    一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...

  5. jQuery ajax解析xml文件demo

    解析xml文件,然后将城市列表还原到下拉列表框中:当选择下拉列表框时,在对应的文本框中显示该城市信息. 前端代码: <!doctype html> <html> <hea ...

  6. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  7. 修改Android中strings.xml文件, 动态改变数据

    有些朋友可能会动态的修改Android中strings.xml文件中的值,在这里给大家推荐一种简单的方法.strings.xml中节点是支持占位符的,如下所示: <string name=&qu ...

  8. java中遍历实体类,获取属性名和属性值

    方式一(实体类): //java中遍历实体类,获取属性名和属性值 public static void testReflect(Object model) throws Exception{ for ...

  9. C#遍历XML文件动态加载菜单

    通过遍历XML文件动态加载菜单,顺便利用WebBrowser控件实现一个简单的桌面浏览器 效果如下: 代码如下: XMLFile1.xml <?xml version="1.0&quo ...

随机推荐

  1. Codeforces 1108E (Array and Segments) 线段树

    题意:给你一个长度为n的序列和m组区间操作,每组区间操作可以把区间[l, r]中的数字都-1,请选择一些操作(可以都不选),使得序列的最大值和最小值的差值尽量的大. 思路:容易发现如果最大值和最小值都 ...

  2. Ros问题汇总

    1.ImportError: No module named beginner_tutorials.srv 解决: cd ~/catkin_ws $ source devel/setup.bash $ ...

  3. 简单的jQuery前端验证码校验

    简单的jQuery前端验证码校验2 html; <!DOCTYPE html> <html lang="zh-cn"> <head> <m ...

  4. EZOJ #81

    传送门 分析 每次拿a中最大的去匹配b中最小的 至于原因画个图感性思考一下就可以啦 代码 #include<iostream> #include<cstdio> #includ ...

  5. EZOJ #78

    传送门 分析 AC自动机板子题qwq 不过似乎可以哈希(因为所有模式串的长度相同,所以哈希乱搞就可以) 代码 #include<iostream> #include<cstdio&g ...

  6. 1003 NOIP 模拟赛Day2 城市建设

    题面不好找放一个吧. Description 描述 在有$N$个地级市的H省,政府为了城市开发建设,决定先修路,后造房子,以吸引外来人员.一开始每个城市中有$b_i$个住户,而在两个城市$u,v$之间 ...

  7. CF 1025C Plasticine zebra

    昨晚忘记判只有一个字符的情况fst了呜呜呜 挺有趣的题,昨晚连刚带猜弄出结论 考虑答案的取值,最优答案可能是一个后缀,或者是一个前缀,或者是一个后缀加上前缀 那么翻转之后最优答案的可选值就有了1的前缀 ...

  8. cakephp目录结构

  9. Mat 类的内存管理

    使用 Mat 类,内存管理变得简单,不再像使用 IplImage 那样需要自己申请和释放内存.虽然不了解 Mat 的内存管理机制,也无碍于 Mat 类的使用,但是如果清楚了解 Mat 的内存管理,会更 ...

  10. 前端(HTML/CSS/JS)-JavaScript编码规范

    1. 变量命名 (1)变量名不应以短巧为荣 左边的变量名都不太清楚,代码的扩展性不好,一旦代码需要加功能的话,就容易出现obj1.obj2.obj3这种很抽象的命名方式.所以一开始就要把变量的名字起得 ...