我有一个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函数的表单。
答案 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);
}