• 1. 当一个对象为不可见时,在IE中是不可以设置它集中焦点的,但是在Firefox里可以
    2. 向表(Table)追加行:
    在FF、 Safari、Opera等浏览器中,用document.createElement创建行后用document.appendChild将行直接添加到表上。但是在IE里不可以,而且没有任何错误提示,这时候,需要为表添加表体(tbody),然后将新创建的行添加到表体(tbody),
    3. childNodes的不同:Firefox把回车后的空白当作文本节点,而ie不是
    4. innerText是IE专有的方法,textContent是Firefox专有的,innerHTML则两者都兼容
    5. 设置某个node对象的style class名称。
    ie中要设置某个node的class用”className”作为attr来set或者get。
    ff等其它的浏览器用”class”作为attr来set或者get。
    6. 事件对象。ie用eventff用evnt
    7. 事件作用对象。ie用objEvent.srcElement,ff用objEvent.target
    8,document.form.item 问题。
    ie中用document.formName.item("itemName")
    ff中改用 document.formName.elements["elementName"]
    9。集合类对象取用时使用 (),IE 能接受,MF 不能。解决方法:改用 [] 作为下标运算
    10,window.event 无法在 fF 上运行
    11,HTML 对象的 id 作为对象名的问题
    现有问题:在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 fF 中不能。
    解决方法:用 getElementById("idName") 代替 idName 作为对象变量使用
    11,变量名与某 HTML 对象 id 相同的问题
    现有问题: fF中,对象 id 不作为 HTML 对象的名称,所以可使用与 HTML 对象 id 相同的变量名,IE 中不能
    解决方法:在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误
    12,event.x 与 event.y 问题
    现有问题:在IE 中,event 对象有 x, y 属性,fF中没有。
    解决方法:
    在fF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
    故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
    event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。
    如果要完全一样,可以稍麻烦些:mX = event.x ? event.x : event.pageX;然后用 mX 代替 event.x
    13,父结点的问题
    在 ff中没有 parentElement parement.children 而用 parentNode parentNode.childNodes。childNodes的下标的含义在IE和fF中不同,fF使用DOM规范,childNodes中会插入空白文本节点。一般可以通过node.getElementsByTagName()来回避这个问题。
    14,const 问题
    现有问题:在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
    解决方法:不使用 const ,以 var 代替。
    15,body 对象
    fF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在
    16,nodeName 和 tagName 问题
    现有问题:在ff中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象有问题。
    解决方法:使用 tagName,但应检测其是否为空
    17,元素属性
    IE下 input.type属性为只读,但是ff下可以修改
    18,document.getElementsByName() 和 document.all[name] 的问题
    现有问题:在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。
    19, 对空格符的处理。按照HTML的标准,空格字符是 。在ff中,如果你误写成&nbsp(少了一个分号)一定不会被FireFox认为是空格,FireFox会认为它是&nbsp。而在IE中,如果你误写成&nbsp(少了一个分号)IE智能地认为它是空格。
    20,对注释的处理。
    按照HTML的标准,注释的操作是放在<!--和-->之间的,而且注释中不能有--,否则会产生 HTML解析错误
  • 1、给DOM对象添加的属性是一个对象的引用。
    范例:    
    var MyObject = {};    
    document.getElementById('myDiv').myProp = MyObject;    
    解决方法:    
    在window.onunload事件中写上: document.getElementById('myDiv').myProp = null;    
      
      
    2、DOM对象与JS对象相互引用。
    范例:    
    function Encapsulator(element) {    
      this.elementReference = element;    
      element.myProp = this;    
    }    
    new  Encapsulator(document.getElementById('myDiv'));    
    解决方法:    
    在onunload事件中写上: document.getElementById('myDiv').myProp = null;    
      
      
    3、给DOM对象用attachEvent绑定事件。
    范例:    
    function doClick() {}    
    element.attachEvent("onclick", doClick);    
    解决方法:    
    在onunload事件中写上: element.detachEvent('onclick', doClick);    
      
      
    4、从外到内执行appendChild。这时即使调用removeChild也无法释放。
    范例:    
    var parentDiv =  document.createElement("div");    
    var childDiv = document.createElement("div");    
    document.body.appendChild(parentDiv);    
    parentDiv.appendChild(childDiv);    
    解决方法:    
    从内到外执行appendChild:    
    var parentDiv =  document.createElement("div");    
    var childDiv = document.createElement("div");    
    parentDiv.appendChild(childDiv);    
    document.body.appendChild(parentDiv);    
      
      
    5、反复重写同一个属性会造成内存大量占用(但关闭IE后内存会被释放)。
    范例:    
    for(i = 0; i < 5000; i++) {    
      hostElement.text = "asdfasdfasdf";    
    }    
    这种方式相当于定义了5000个属性!    
    解决方法:    
    其实没什么解决方法:P~~~就是编程的时候尽量避免出现这种情况咯~~    
      
      
    说明:    
    1、以上资料均来源于微软官方的MSDN站点,链接地址:    
    http://msdn.microsoft.com/librar ... e_leak_patterns.asp    
    大家可以到上面这个地址中看到详细的说明,包括范例和图例都有。只是我英文不太好,看不太懂,如果我上述有失误或有需要补充的地方请大家指出。    
      
    2、对于第一条,事实上包括 element.onclick = funcRef 这种写法也算在其中,因为这也是一个对对象的引用。在页面onunload时应该释放掉。    
      
    3、对于第三条,在MSDN的英文说明中好像是说即使调用detachEvent也无法释放内存,因为在attachEvent的时候就已经造成内存“LEAK”了,不过detachEvent后情况还是会好一点。不知道是不是这样,请英文好的亲能够指出。    
      
    4、在实际编程中,这些内存问题的实际影响并不大,尤其是给客户使用时,客户对此绝不会有察觉,然而这些问题对于程序员来说却始终是个心病 --- 有这样的BUG心里总会觉得不舒服吧?能解决则给与解决,这样是最好的。事实上我在webfx.eae.net这样顶级的JS源码站点中,在它们的源码里都会看到采用上述解决方式进行内存的释放管理。