在IE10中访问对象的“文档”成员而不知道其类型

时间:2013-09-17 18:15:16

标签: javascript internet-explorer internet-explorer-10

我有一个javascript函数,它从页面文档中获取元素,或者从parentObj.document传入parentObj。

但是,在IE10中,当我在兼容模式下时,访问parentObj.document会返回'undefined'。使用IE开发人员工具,parentObj 具有文档成员,但它仅被视为通用对象。可以将不同类型的对象传递给函数。

示例代码:

function getJSObject(objID, parentObj)
{
    if (parentObj != null)
    {
        return parentObj.document.getElementById(objID);
    }
    return document.getElementById(objID);
}

(不是实际的功能,这是我可以发布的内容,以便了解这个想法。)

基本上,这适用于IE10兼容模式,并且在IE10兼容模式之外无法正常工作。这样做的正确方法是什么?

编辑:调用代码:

var selectionPage = objWindows[0].document.forms[sourceForm];
if (selectionPage)
{
    var selectionControl = getJSObject(sourceControlID, selectionPage);
}

objWindows只是一个简单的全局级数组,可以跟踪打开的弹出窗口。 sourceForm是从弹出窗口调用整个js函数的表单。

2 个答案:

答案 0 :(得分:1)

选项1

有两种解决方案可行。理想情况下,您只需传入window对象。

var selectionPage = objWindows[0];
var formElement = selectionPage.document.forms[sourceForm];
if (formElement)
{
    var selectionControl = getJSObject(sourceControlID, selectionPage);
}

选项2

另一个解决方案是更改getJSObject以允许您从相关窗口传入dom元素。我会将函数更改为以下内容:

function getJSObject(objID, objectFromWindow)
{
    if (objectFromWindow != null && !!objectFromWindow.ownerDocument)
    {
        return objectFromWindow.ownerDocument.getElementById(objID);
    }
    return document.getElementById(objID);
}

答案 1 :(得分:0)

您可以尝试这样的事情(未经测试):

function getJSObject(objID, parentObj) {
    var parent = parentObj != null) ? parentObj : document;
    var doc;
    while(doc && Object.prototype.toString.call(doc) != "[object HTMLDocument]") {
        doc = doc.parentNode;
    }
    return doc.getElementById(objID);
}