获取嵌套在 javascript 框架内的 iframe 内的元素值? [英] Get element value inside iframe which is nested inside Frame in javascript?
问题描述
我的主要 php 页面有 2 个框架.在第二个框架内有 iframe.我想从第一帧访问 iframe 文档中元素的值.
I main php page in which there are 2 frames. Inside the second frame there is iframe. I want to access value of element on iframe document from the 1st frame.
我是这样试的:
var frame1 = parent.frames[1];
var frame2 = frame1.document.getElementsByTagName('iframe')[0];
var eleValue =frame2.contentWindow.document.getElementById("MyElement").value;
但我没有收到任何价值,尽管它在那里.
but I am not receiving any value though it is there.
var frame1 = parent.frames[1];
alert(frame1.name);
var frame2 = frame1.document.getElementsByTagName('iframe')[0];
alert(frame2.name);
var txtClinic = frame1.document.getElementsByTagName('iframe')[0].contentDocument.getElementById("clinicFlag");
最后一行代码没有返回任何控制对象.
last line of code doesnot return any control object.
推荐答案
这是我在评论中链接的答案的修改片段.函数返回一个 (i)frame 的 window
对象,id
被传递(id
),或者 null
,如果未找到 (i)frame
.此方法仅适用于所有 (i)frame
都在同一域中的情况.此外,赋予 (i)frame
元素的 id
必须在涉及窗口结构的所有文档中是唯一的.
Here's a modified snippet of my answer linked in a comment. Function returns the window
object of an (i)frame with id
passed (id
), or null
, if the (i)frame
is not found. This method works only, if all the (i)frame
s are in the same domain. Also id
s given to (i)frame
elements must be unique throughout all documents involved in the window structure.
function searchFrame(id) { // id = the id of the wanted (i)frame
var result = null, // Stores the result
search = function (iframes) { // Recursively called function
var n; // General loop counter
for (n = 0; n < iframes.length; n++) { // Iterate through all passed windows in (i)frames
if (iframes[n].frameElement.id === id) { // Check the id of the (i)frame
result = iframes[n]; // If found the wanted id, store the window to result
}
if (!result && iframes[n].frames.length > 0) { // Check if result not found and current window has (i)frames
search(iframes[n].frames); // Call search again, pass the windows in current window
}
}
};
search(window.top.frames); // Start searching from the topmost window
return result; // Returns the wanted window if found, null otherwise
}
该函数可以找到带有传递的id
的frame
或iframe
,而不管它放在窗口结构中的什么位置.该函数也可以在任何窗口中放置和调用.我会把它放在主页上(作为全局).如果在子窗口中需要该方法,只需使用 top.searchFrame(...)
调用.
This function can find a frame
or iframe
with the passed id
regardless where it is placed in the window structure. Also the function can be placed and called in any window. I'd put this to the main page (as global). If the method is needed in subwindows, just call with top.searchFrame(...)
.
除了id
s,也可以使用name
s,只要它们也是唯一的.在这种情况下,searchFrame()
中的 id
检查需要编辑为 name
检查.
Instead of id
s, also name
s can be used, as long as they are also unique. In that case the id
check in searchFrame()
needs to be edited to name
check.
在你的情况下,首先你需要给目标 iframe
一个 id
,然后你可以像这样使用代码:
In your case, first you need to give an id
to the target iframe
, then you can use the code for example like this:
var txtClinic = searchFrame('IFRAME_ID').document.getElementById('clinicFlag');
上述方法获取单个引用可能有点矫枉过正,但如果您必须在不同窗口中多次获取这些跨窗口引用,它会非常有用.
The method above might be a bit overkilling to get a single reference, but it's very helpful, if you have to get these cross-window references multiple times within different windows.
你的具体任务可以这样完成:
The specific task of yours could be done like this:
var txtClinic = parent.frames[1].frames[0].document.getElementById('clinicFlag');
(i)frame
的 name
s 也可以方便地与 frames
集合一起使用.您可以使用名称代替索引.总是从主页开始链接引用,即从 top
开始.例如:
name
s of the (i)frame
are also handy to use with frames
collection. Instead indices you can use names. Just always chain the reference starting from the main page, i.e. from top
. For example:
var iframeWin = top.frames['frame2'].frames['iframe1'];
有用的阅读:
Useful reading:
window.top
window.frameElement
window.frames
这篇关于获取嵌套在 javascript 框架内的 iframe 内的元素值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!