非IE浏览器增加 contains 方法:

if (typeof (HTMLElement) != "undefined") {
    HTMLElement.prototype.contains = function (element) {
        while (!!(element && element.nodeType == 1)) {
            if (element== this) return true;
            element= element.parentNode;
        }
        return false;
    }
}

在 mouseover 事件执行时先进行如下判断,结果为 true 时再执行方法体:

var element = e.fromeElement || e.relatedTarget; //此处 e 为 mouseover event 事件对象;
if (!this.contains(element)) mouseOverFunc();

在 mouseout 事件执行时先进行如下判断,结果为 true 时再执行方法体:

var element = e.toElement || e.relatedTarget; //此处 e 为 mouseover event 事件对象;
if (!this.contains(element)) mouseOutFunc();

在IE中,所有的HTML元素都有一个contains方法,它的作用是判断当前元素内部是否包含指定的元素。我们利用这个方法来判断外层元素的事件是不是因为内部元素而被触发,如果内部元素导致了不需要的事件被触发,那我们就忽略这个事件。

event.fromElement 指向触发 onmouseover 和 onmouseout 事件时鼠标离开的元素;

event.toElement 指向触发 onmouseover 和 onmouseout 事件时鼠标进入的元素。

那么上面两行代码的含义就分别是:

当触发onmouseover事件时,判断鼠标离开的元素是否是当前元素的内部元素,如果是,忽略此事件;

当触发onmouseout事件时,判断鼠标进入的元素是否是当前元素的内部元素,如果是,忽略此事件;

这样,内部元素就不会干扰外层元素的 onmouseover 和 onmouseout 事件了。

使用 Javascript 的 window.open 方法弹出窗口后,弹出窗口(子窗口)与母窗口之间互相访问对象的方法:

子窗口访问母窗口对象的方法:子窗口使用 window.opener 即引用母窗口,比如:

window.opener.setStr(); //执行母窗口的 setStr 方法;

母窗口访问子窗口对象的方法:母窗口在 window.open 执行时把它引用给一个变量,这个变量既是子窗口的引用,比如:

var w = window.open("new.html"); //变量 w 既是弹出窗口的引用;
w.setStr(); //执行弹出窗口的 setStr 方法;