0

我有一个 javascript 函数,它通过 ID 从页面文档中获取元素,或者如果 parentObj 被传入,则从 parentObj.document 获取元素。

但是,在 IE10 中,当我处于兼容模式时,访问 parentObj.document 会返回“未定义”。使用 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 函数的表单。

4

2 回答 2

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);
}
于 2013-09-17T18:21:57.100 回答
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);
}
于 2013-09-17T18:40:25.663 回答