jQuery中,selectiframe内的元素,这是在iframe中
使用jQuery我试图访问div id =“元素”。
<body> <iframe id="uploads"> <iframe> <div id="element">...</div> </iframe> </iframe> </body>
所有的iframe都在同一个域上,没有www / non-www问题。
我已经成功地select了第一个iframe中的元素,而不是第二个嵌套的iframe。
我已经尝试了一些东西,这是最近的(也是一个非常绝望的尝试)。
var iframe = jQuery('#upload').contents(); var iframeInner = jQuery(iframe).find('iframe').contents(); var iframeContent = jQuery(iframeInner).contents().find('#element'); // iframeContent is null
编辑:要排除时间问题,我用了一个点击事件,等了一会儿。
jQuery().click(function(){ var iframe = jQuery('#upload').contents().find('iframe'); console.log(iframe.find('#element')); // [] null });
有任何想法吗? 谢谢。
更新:我可以select第二个iframe像这样…
var iframe = jQuery('#upload').contents().find('iframe');
现在的问题似乎是src是空的,因为iframe是用javascript生成的。 所以iframe被选中,但内容长度为0。
真的卡住了。
事情是,您提供的代码将无法正常工作,因为<iframe>
元素必须具有“src”属性,如:
<iframe id="uploads" src="http://domain/page.html"></iframe>
可以使用.contents()
来获取内容:
$('#uploads).contents()
会让你访问第二个iframe,但是如果iframe是“INSIDE”,则加载#uploads iframe的http://domain/page.html
文档。
为了testing我是正确的,我创build了3个html文件,名为main.html,iframe.html和noframe.html,然后selectdiv#元素就好了:
$('#uploads').contents().find('iframe').contents().find('#element');
由于您需要等待iframe加载资源,因此元素将不可用。 此外,所有的内联框架必须在同一个域上。
希望这可以帮助 …
这里是我使用的3个文件的html(用你的域和urlreplace“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>
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>
noframe.html
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>noframe.html example</title> </head> <body> <div id="element">some content</div> </body>
var iframeInner = jQuery(iframe).find('iframe').contents();
var iframeContent = jQuery(iframeInner).contents().find('#element');
iframeInner包含来自的元素
<div id="element">other markup goes here</div>
iframeContent将查找里面的元素
<div id="element">other markup goes here</div>
(find不search当前元素),这就是为什么它返回null。
嘿,我有东西似乎在做你想做的事情。 它涉及一些脏的复制,但工作。 你可以在这里find工作代码
所以这里是主html文件:
<!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> $(document).ready(function(){ Iframe = $('#frame1'); Iframe.on('load', function(){ IframeInner = Iframe.contents().find('iframe'); IframeInnerClone = IframeInner.clone(); IframeInnerClone.insertAfter($('#insertIframeAfter')).css({display:'none'}); IframeInnerClone.on('load', function(){ IframeContents = IframeInner.contents(); YourNestedEl = IframeContents.find('div'); $('<div>Yeepi! I can even insert stuff!</div>').insertAfter(YourNestedEl) }); }); }); </script> </head> <body> <div id="insertIframeAfter">Hello!!!!</div> <iframe id="frame1" src="Test_Iframe.html"> </iframe> </body> </html>
正如你所看到的,一旦第一个Iframe被加载,我得到第二个并克隆它。 然后我把它重新插入DOM,所以我可以访问onload事件。 一旦这个加载,我检索从非克隆的内容(也必须加载,因为他们使用相同的src)。 然后,你可以做你想要的内容。
这是Test_Iframe.html文件:
<!DOCTYPE html> <html> <head> </head> <body> <div>Test_Iframe</div> <iframe src="Test_Iframe2.html"> </iframe> </body> </html>
和Test_Iframe2.html文件:
<!DOCTYPE html> <html> <head> </head> <body> <div>I am the second nested iframe</div> </body> </html>
你可能有一个时间问题。 您的document.ready命令可能在第二个iFrame加载之前触发。 你没有足够的信息来帮助更多 – 但让我们知道,如果这似乎是可能的问题。
您应该使用实时方法来渲染稍后渲染的元素,例如colorbox,hidden fields或iframe
$(".inverter-value").live("change",function() { elem = this $.ajax({ url: '/main/invertor_attribute/', type: 'POST', aysnc: false, data: {id: $(this).val() }, success: function(data){ // code }, dataType: 'html' }); });
我认为最好的方式来达到你的div:
var your_element=$('iframe#uploads').children('iframe').children('div#element');
它应该运作良好。
如果浏览器支持iframe,那么iframe中的DOM来自各个标签的src属性。 内置iframe标签的内容被用作浏览器不支持iframe标签的回退机制。
参考: http : //www.w3schools.com/tags/tag_iframe.asp
我想你的问题是,jQuery没有加载到你的iframe中。
最安全的方法是依靠纯粹的基于DOM的方法来parsing你的内容。
或者,从jQuery开始,然后一旦进入你的iframe,如果typeof window.jQuery == 'undefined'
testing一次,如果它是真的,jQuery没有在里面启用,并回退基于DOM的方法。