Ian*_*ley 42 javascript iframe jquery
使用jQuery我试图访问div id ="element".
<body>
<iframe id="uploads">
<iframe>
<div id="element">...</div>
</iframe>
</iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
所有iframe都在同一个域中,没有www /非www问题.
我已经成功选择了第一个iframe中的元素,但没有成功选择第二个嵌套的iframe.
我尝试过一些事情,这是最近的事情(也是一次非常绝望的尝试).
var iframe = jQuery('#upload').contents();
var iframeInner = jQuery(iframe).find('iframe').contents();
var iframeContent = jQuery(iframeInner).contents().find('#element');
// iframeContent is null
Run Code Online (Sandbox Code Playgroud)
编辑:为了排除计时问题,我使用了点击事件并等了一会儿.
jQuery().click(function(){
var iframe = jQuery('#upload').contents().find('iframe');
console.log(iframe.find('#element')); // [] null
});
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
更新:我可以像这样选择第二个iframe ......
var iframe = jQuery('#upload').contents().find('iframe');
Run Code Online (Sandbox Code Playgroud)
现在的问题似乎是src是空的,因为iframe是用javascript生成的.因此选择iframe但内容长度为0.
Car*_*llo 59
事实是,你提供的代码将无法工作,因为<iframe>元素必须具有"src"属性,如:
<iframe id="uploads" src="http://domain/page.html"></iframe>
Run Code Online (Sandbox Code Playgroud)
可以.contents()用来获取内容:
$('#uploads).contents()将允许您访问第二个iframe,但如果该iframe是"INSIDE" http://domain/page.html文档,则加载#uploads iframe.
为了测试我是对的,我创建了3个名为main.html,iframe.html和noframe.html的html文件,然后选择div#元素就好了:
$('#uploads').contents().find('iframe').contents().find('#element');
Run Code Online (Sandbox Code Playgroud)
由于您需要等待iframe加载资源,因此元素将无法延迟.此外,所有iframe都必须位于同一个域中.
希望这可以帮助 ...
这里是我使用的3个文件的html(用你的域和url替换"src"属性):
main.html中
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>main.html example</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function () {
console.log( $('#uploads').contents().find('iframe').contents().find('#element') ); // nothing at first
setTimeout( function () {
console.log( $('#uploads').contents().find('iframe').contents().find('#element') ); // wait and you'll have it
}, 2000 );
});
</script>
</head>
<body>
<iframe id="uploads" src="http://192.168.1.70/test/iframe.html"></iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
Iframe.html的
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>iframe.html example</title>
</head>
<body>
<iframe src="http://192.168.1.70/test/noframe.html"></iframe>
</body>
Run Code Online (Sandbox Code Playgroud)
noframe.html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>noframe.html example</title>
</head>
<body>
<div id="element">some content</div>
</body>
Run Code Online (Sandbox Code Playgroud)
小智 13
var iframeInner = jQuery(iframe).find('iframe').contents();
var iframeContent = jQuery(iframeInner).contents().find('#element');
iframeInner包含来自的元素
<div id="element">other markup goes here</div>
Run Code Online (Sandbox Code Playgroud)
iframeContent将找到里面的元素
<div id="element">other markup goes here</div>
Run Code Online (Sandbox Code Playgroud)
(find不搜索当前元素)这就是它返回null的原因.