我有iframe
这样的
<iframe name="myframe1" id="myframe1" width="100%" height="100%" src="a.html">
<html>
<head></head>
<frameset name="myframe2" cols="0%, 100%" border="0" frameBorder="0" frameSpacing="0">
<frame name="page1" src="c.html" scrolling="no"></frame>
<frame name="page2" src="d.html" >
<html>
<head></head>
<body id="top">
<div id="div1">
<div id="div2">
<div id="div3">
<ul id="x">
<li>a</li>
<li>b</li>
</ul>
</div>
</div>
</div>
</body>
</html>
</frame>
</frameset>
</html>
</iframe>
我想引用元素“x”。我尝试了几种方法,但我找不到解决方案。
答案 0 :(得分:130)
document.getElementById('myframe1').contentWindow.document.getElementById('x')
所有浏览器都支持 contentWindow
,包括旧版本的IE。
请注意,如果iframe
的{{1}}来自其他域,则由于Same Origin Policy,您将无法访问其内容。
答案 1 :(得分:18)
使用contentDocument
来实现此目标
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument)
? iframe.contentDocument
: iframe.contentWindow.document;
var ulObj = innerDoc.getElementById("ID_TO_SEARCH");
答案 2 :(得分:1)
(这是添加到所选答案中的内容)
请确保先加载iframe
contentWindow.document
否则,您的getElementById
将是null
。
PS:无法发表评论,信誉仍然很低,无法发表评论,但这是对所选答案的跟进,因为我花了一些调试时间来尝试确定应该强制iframe
加载在选择inner-iframe元素之前。
答案 3 :(得分:0)
就我而言,我试图获取 pdfTron 工具栏,但不幸的是,每次刷新页面时,其 ID 都会更改。
所以,我最终还是这样做了。
const pdfToolbar = document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('HeaderItems');
就像在tagName编写的数组中一样,您的应用程序中将始终具有iFrame的固定索引。
答案 4 :(得分:0)
您需要确保框架已满载 最好的方法是使用onload:
<!DOCTYPE html>
<html>
<head>
<title>Sample</title>
<meta charset="utf-8">
</head>
<body>
<select name = 'pokeball2' id="pokeballType">
<option value=1 selected = 'selected'>Pokeball</option>
<option value=2>Ultra Ball</option>
<option value=1.5>Great Ball</option>
<option value=3.5>Dusk Ball if used inside cave</option>
<option value=4>Quick ball if used on first turn</option>
<option value='timerBall'>Timer Ball</option>
</select>
<script>
let pokeball = document.getElementById("pokeballType");
// Set up an even handler for when the value of the select changes
pokeball.addEventListener("change", function(){
if (pokeball.value === 'timerBall') {
console.log('Working')
}
});
</script>
</body>
</html>
此功能将在iframe完全加载后自动运行。
这可以通过setTimeout完成,但是我们无法获得帧加载的确切时间。
希望这对某人有帮助。