`
gwj41
  • 浏览: 99702 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

firefox与IE的nextSibling

阅读更多

今天遇到了一个JS的问题,后来上网查了一下,原来是对html的DOM操作时候,nextsibling引起的问题,mark一下

 

网上firefox和ie的javascript兼容性也讲的比较多了
可以在百度上搜索"firefox javascript 兼容性"
比较简单的东西百度上能找到中文的就用baidu好了.
主要一般都是document.all这样的应用,一般改为getElementById
还有就是一个页面有多个表单的时候需要注意一些问题.

下面还有一些需要补充的
就是firstChild,nextsbiling这两个.
下面给出函数吧.还是代码比较说明问题
代码都是网上来的.
不过要注意的是,getNext和getFirstChild是不一样的
next是下一个,同级别的下一个,不会取到自己这个节点的子节点.

可能是因为对dom的理解不一样ie和firefox对firstChild,nextSbiling的处理不太一样.
所以要取到下一个结点,只能用type来判断了.


function getNextSibling(startBrother){
  endBrother=startBrother.nextSibling;
  while(endBrother.nodeType!=1){
    endBrother = endBrother.nextSibling;
  }
  return endBrother;
}

function getNextSibling1(obj){
if(obj.nextSibling.nodeType==3) {
sibling=obj.nextSibling.nextSibling; // Moz. Opera
}
else {
sibling=obj.nextSibling; // IE
}
return sibling;
}
function getFirstChild(obj){
for (i=0; i<obj.childNodes.length; i++){
if (obj.childNodes[i].nodeType==1)
    return obj.childNodes[i];
else
    continue;
}

需要使用的时候先getElementByid获取到首结点,然后就可以取到后面的结点了.


另外就是ie不区分变量大小写,收到html首先就格式化了,所以要注意id可能会相同.
会导致一些问题.

另外就是ie会把NULL字符转换成space空格,firefox是不会处理的,但是
如果javascript里面处理NULL会有一些问题.opera基本能够兼容IE的一些
函数,比如documnet.all等等.基本都能用吧,不过空字符还是不行的.是变量中的空字符
会带来问题.

分享到:
评论
1 楼 ricoyu 2011-03-02  
代码比较乱, 指出几点问题:
1, endBrother=startBrother.nextSibling;
声明变量请使用var关键字, 不加var变量作用域是全局的, 即作为window对象的一个属性创建, endBrother将在函数外仍可见。改进一下:
function getNextSibling(startBrother){
  var endBrother=startBrother.nextSibling;
  while(endBrother.nodeType!=1){
    endBrother = endBrother.nextSibling;
  }
  return endBrother;
}

2,
getFirstChild
最后少了一个右括号}
3, 这个函数,请看我的注释
function getNextSibling1(obj){
  //这边只是判断node是不是一个text node而已, 如果是,
  //不管是IE还是ff,Opera都会进到这段代码里面, 为何你认为只有
  // Moz. Opera会执行这段代码?
  if(obj.nextSibling.nodeType==3) {
    //alert('ie too');
    sibling=obj.nextSibling.nextSibling; // Moz. Opera
  }
  // 这边的分支表示如果node不是text node, 那么皆大欢喜, 不管
  // 是IE还是其他浏览器, 都会执行这段代码, 怎么变成IE专享的了呢?
  else {
    //alert('Firefox too');
    sibling=obj.nextSibling; // IE
  }
  return sibling;
}


其实nextSibling在FF/ie间差别的实质原因是:
当两个nodeType都为1的element间存在换行, 那么换行符被FF认为是一个空格, 因此element1.nextSibling为text node, 即这个空格。 请看下面两组链接的差别:
第一组有换行, 所以在FF中link2的nextSibling是一个textNode元素,它的nodeType为3
<a href="link2" id="link2"></a>
<a href="link3" id="link3"></a>
第二组没有换行, 因此在FF中link2.nextSibling就是link3了,它的nodeType为1
<a href="link2" id="link2"></a><a href="link3" id="link3"></a>
我想这才是你这篇博文想要说的
引用
ie和firefox对firstChild,nextSbiling的处理不太一样
的实质原因。

相关推荐

    js操作XML文件(兼容FF,IE)

    本文将详细探讨如何在JavaScript中操作XML文件,并确保代码在Firefox和IE之间具有良好的兼容性。 1. **创建XML对象**: 在JavaScript中,可以使用`ActiveXObject`(仅适用于IE)或`DOMParser`(通用方法)来创建...

    js nextSibling属性和previousSibling属性概述及使用注意

    例如,IE浏览器会忽略节点间的空白字符和换行,而Firefox和Safari则会将这些视为文本节点。因此,在某些情况下,尤其是在不同浏览器间保持兼容性时,可能需要使用`nextSibling.nextSibling`来获取实际的元素节点。 ...

    javascript中的nextSibling使用陷(da)阱(keng)

    今天写js的时候遇到了一个陷(da)阱(keng) 关于HTML/XML节点的问题 据说在IE中nextSibling不会返回文本节点,而chrome或者firefox等会返回文本节点…… 这个我的工作带来了很严重的问题 在网上搜到了很多处理方法,都...

    javascript DOM 操作.doc

    FireFox 中遍历 DOM 文档:在FireFox中,可以使用与IE中通用的方法来遍历DOM文档。 FireFox 中处理错误:在FireFox中,可以使用parseError对象来输出错误信息,该对象会替换出错的xml文档。 ```javascript if...

    javascript中的previousSibling和nextSibling的正确用法

    特别是在Internet Explorer(IE)和Firefox(FF)浏览器中,它们对空白文本节点的处理方式不同,IE可能会忽略这些空白文本节点,而Firefox则不会。 在IE中,如果你使用nextSibling获取下一个兄弟节点,可能会直接...

    FF火狐下获取一个元素同类型的相邻元素实现代码

    它们在Firefox下可以很好地工作,但请注意,在其他浏览器如Chrome、Safari或IE中,可能需要额外的兼容性处理,因为不同浏览器对DOM API的实现可能存在差异。 总结来说,获取元素同类型的相邻元素在JavaScript中可以...

    js 获取子节点函数 (兼容FF与IE)

    由于历史原因,不同的浏览器在实现DOM操作时存在一些差异,尤其是早期版本的Internet Explorer(IE)和Firefox(FF)。为了编写跨浏览器兼容的JavaScript代码,开发者需要处理这些差异性。本文将介绍如何兼容IE和FF...

    最简单的图片轮播代码(修改版)

    在此项目中,开发者已经针对Firefox和IE9浏览器进行了适配,确保在这些浏览器上能正常运行。 【描述】提到的问题在于代码的兼容性。由于不同的浏览器对JavaScript API的支持程度不同,特别是在老版本的Internet ...

    让innerHTML的脚本也可以运行起来

    默认情况下,IE和Firefox对嵌入到`innerHTML`中的脚本有不同的执行策略。IE有时会忽略这些脚本,而Firefox则有可能需要特定的操作来触发脚本执行。 在IE中,如果`innerHTML`的HTML字符串中包含`&lt;script&gt;`标签,并且...

    浅析JavaScript中扫瞄器的兼容问题_.docx

    它是大部分现代浏览器(包括Firefox的新版本)所支持的。 - 兼容性处理:为了在所有浏览器中都能正常工作,可以使用条件语句进行检测,优先尝试`textContent`,如果不存在再使用`innerText`。 ```javascript if ...

    JavaScript获取HTML DOM节点元素的方法的总结

    4. `parentObj.children`:在IE7中与`childNodes`类似,但在Firefox中不受支持,因为它只返回直接的元素子节点。 5. `parentObj.getElementsByTagName(tagName)`:与全局的`document.getElementsByTagName()`类似,...

    JAVASCRIPT加载XML文档及操作XML文档的方法[归类].pdf

    - 所有现代浏览器(如IE、Firefox、Chrome、Safari等)都内置了XML解析器,用于将XML文档转换为可被JavaScript访问的DOM(Document Object Model)对象。 - 微软的XML解析器(如ActiveXObject("Microsoft.XMLDOM")...

    javascript获取指定节点父节点、子节点的方法.pdf

    4. `parentObj.children`:返回父节点的直接子节点数组,IE7和Firefox上的表现可能不同,不建议单独依赖此属性。 5. `parentObj.getElementsByTagName(tagName)`:在父节点的所有子节点中查找指定类型的子节点,返回...

    前端笔试面试题目总结.docx

    3. **浏览器兼容性问题**: 在编写JavaScript代码时,开发者需要注意不同浏览器(如IE、Firefox、Chrome等)对某些API或语法的支持程度。例如,`nextSibling`和`nextElementSibling`都是获取元素的下一个兄弟节点,但...

    JavaScript实现清空(重置)文件类型INPUT元素值的方法

    这种方法适用于IE11及以上以及非IE的现代浏览器,如Chrome、Firefox和Opera。代码如下: ```javascript function clearInputFile(f) { try { f.value = ''; // 适用于IE11, Chrome/Firefox/Opera等 } catch ...

    JavaScript执行效率优化与内存管理优化.pdf

    Firefox和Opera对此进行了优化,但使用数组仍然是推荐的做法。 1.2.2 使用`join`方法合并数组 在数组中存储要拼接的字符串,然后使用`join('')`将它们合并成一个字符串。这种方式避免了多次创建和销毁字符串对象,...

    js Element Traversal规范中的元素遍历方法.docx

    需要注意的是,Element Traversal规范在以下浏览器中得到支持:IE9+,Firefox 3.5+,Safari 4+,Chrome 和 Opera 10+。 了解并利用这些新的属性,开发者可以更有效地编写跨浏览器的JavaScript代码,减少与元素遍历...

    一些高性能的Javascript代码.doc

    在IE和Firefox下,这种方法可将效率提升10%-30%,在Firefox中尤为明显。例如: ```javascript // 优化前 for (var i = 0; i ; i++) { var el = document.createElement('p'); el.innerHTML = i; document.body...

Global site tag (gtag.js) - Google Analytics