关于jQuery通过ID获取元素时在IE7与IE其他版本以及其他浏览器的区别
2013-07-24 08:43
756 查看
最近做了一个需求,发现一个现象,跟大伙分享一下,如果有说得不对之处请大伙指正,需求大致如下:
界面展示一个Json列表,每一行都要根据Json中的数据做一些样式上面的特殊处理。
起初也没有考虑太多,直接就是在ajax完成的回调函数中添加如下代码:
但代码上线后发现,IE7下面就永远只有第一条满足条件的数据样式被改变了,IE的其他版本和其他浏览器均正常。
这就郁闷了,有想过会不会是回调函数中的JS代码阻碍了Json数据的渲染,Json数据没有没有全部渲染出来而导致
jQuery无法正确获取到对象,有了这个想法就立马验证了一把,虽然发现IE与chrome和firefox对Json的渲染有所不同,
验证结果为:
IE下面,是待得回调函数走完时才会将Json数据渲染到界面,而chrome和firefox则是先渲染完再执行回调函数。
但这并不是问题所在。
之后无意之中在html源码中看到有多个ID=drawndnTable的元素,而这正是我要找的元素,为什么会产生多个ID一样的
元素在这里不多说了,是UI产生的,而且这个drawndnTable标识是我必须需要的。
之后通过慢慢验证发现,虽然html元素中的ID属性是唯一的;
但jQuery通过ID属性元素时,IE7和IE8、IE9、chrome、firefox有一定的区别
如:
当html界面的多个元素ID都为A时;
在IE7下面通过jQuery("#A")的形式永远只会获取到众多ID相同中第一个html元素;
而在其他版本和浏览器中,会将所有元素ID都等于A的了元素组装成一个Array,就像下面这样:
Html界面中有3个table元素,ID都为B,每个表都有一行row,通过jQuery("#B tr")的形式就能
获得3行,而如果是IE7下面则只能获取到一行。
知道这一点后,我就将ID=drawndnTable改成name=drawndnTable,代码改成如下方式
界面展示一个Json列表,每一行都要根据Json中的数据做一些样式上面的特殊处理。
起初也没有考虑太多,直接就是在ajax完成的回调函数中添加如下代码:
for(var i=0;i<json.rows.length;i++){ if(json.rows[i].maxOvdTerms!="0"||json.rows[i].maxOvdDays!="0"){ jQuery("#drawndnTable tr").eq(i).addClass("fontOrange"); } }
但代码上线后发现,IE7下面就永远只有第一条满足条件的数据样式被改变了,IE的其他版本和其他浏览器均正常。
这就郁闷了,有想过会不会是回调函数中的JS代码阻碍了Json数据的渲染,Json数据没有没有全部渲染出来而导致
jQuery无法正确获取到对象,有了这个想法就立马验证了一把,虽然发现IE与chrome和firefox对Json的渲染有所不同,
验证结果为:
IE下面,是待得回调函数走完时才会将Json数据渲染到界面,而chrome和firefox则是先渲染完再执行回调函数。
但这并不是问题所在。
之后无意之中在html源码中看到有多个ID=drawndnTable的元素,而这正是我要找的元素,为什么会产生多个ID一样的
元素在这里不多说了,是UI产生的,而且这个drawndnTable标识是我必须需要的。
之后通过慢慢验证发现,虽然html元素中的ID属性是唯一的;
但jQuery通过ID属性元素时,IE7和IE8、IE9、chrome、firefox有一定的区别
如:
当html界面的多个元素ID都为A时;
在IE7下面通过jQuery("#A")的形式永远只会获取到众多ID相同中第一个html元素;
而在其他版本和浏览器中,会将所有元素ID都等于A的了元素组装成一个Array,就像下面这样:
Html界面中有3个table元素,ID都为B,每个表都有一行row,通过jQuery("#B tr")的形式就能
获得3行,而如果是IE7下面则只能获取到一行。
知道这一点后,我就将ID=drawndnTable改成name=drawndnTable,代码改成如下方式
for(var i=0;i<json.rows.length;i++){ if(json.rows[i].maxOvdTerms!="0"||json.rows[i].maxOvdDays!="0"){ jQuery("table[name='drawndnTable']").eq(i).addClass("fontOrange"); } }
相关文章推荐
- jquery获取浏览器类型以及版本
- jQuery .html()用为读取和修改元素的HTML标签 对应js中的innerHTML[通过ID获取元素]
- 关于IE6和IE7以及多个版本IE共存的问题
- js:for循环ul/li,获取当前被点击元素的id,以及给其他li设置属性
- 通过class和id获取DOM元素的区别
- jquery通过id或name获取标签的值,以及简单的js正则表达式
- [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器
- input-color与input-checkbox元素通过jquery获取值以及设定值(input属性的取值与设定)
- [完美]原生JS获取浏览器版本判断--支持Edge,IE,Chrome,Firefox,Opera,Safari,以及各种使用Chrome和IE混合内核的浏览器
- js querySelector和getElementById通过id获取元素的区别
- 通过class和id获取DOM元素的区别
- javascript querySelector和getElementById通过id获取元素的区别
- js用来区别IE与其他浏览器以及IE6-8的方法
- 通过js获取系统版本以及浏览器版本
- js querySelector和getElementById通过id获取元素的区别
- querySelector和getElementById通过id获取元素的区别
- 关于在ie7,8等低版本浏览器的获得<select>元素的值的的兼容性问题
- jquery通过id或name获取标签的值,以及简单的js正则表达式(笔记)
- 【尚未解决】关于webdriver中浏览器从页面回退后通过id/xpath取得元素出错的问题
- [转]使用Filters滤镜弥补CSS3的跨浏览器问题以及兼容低版本IE