在iFrame jQuery中选择元素


122

在我们的应用程序中,我们解析一个网页并将其加载到iFrame中的另一个页面中。该加载页面中的所有元素都有其令牌标识。我需要通过那些tokenid -s选择元素。意思是-我单击主页上的元素,然后在iFrame中选择页面中的相应元素。在jQuery的帮助下,我通过以下方式进行操作:

function selectElement(token) {
     $('[tokenid=' + token + ']').addClass('border'); 
}

但是,使用此功能,我只能选择当前页面中的元素,而不能选择iFrame中的元素。谁能告诉我如何在加载的iFrame中选择元素?

谢谢。

Answers:


157
var iframe = $('iframe'); // or some other selector to get the iframe
$('[tokenid=' + token + ']', iframe.contents()).addClass('border');

另请注意src,由于安全原因,如果此iframe的指向其他域,则您将无法使用javascript访问此iframe的内容。


8
请注意,$('iframe')不会直接返回iframe。您需要将其拉出阵列。
麦凯拉

感谢您的帮助。但这似乎不起作用。
cycero 2011年

3
@cycero,它应该可以工作。您是否在动态生成此iframe?不要忘记,由于安全原因,如果将此iframe的src元素指向您以外的其他域,则无法访问其内容。
Darin Dimitrov

我不是从其他域而是从同一文件夹加载它。iFrame内容是动态生成的,并作为文件存储在服务器上。然后将该文件加载到iFrame中。
cycero 2011年

@cycero,我已经更新了我的答案。尝试通过iframe.contents()
Darin Dimitrov

52

看一下这篇文章:http : //praveenbattula.blogspot.com/2009/09/access-iframe-content-using-jquery.html

$("#iframeID").contents().find("[tokenid=" + token + "]").html();

将选择器放置在find方法中。

但是,如果iframe不是来自您的服务器,则可能无法实现。其他帖子谈论权限被拒绝错误。

jQuery / JavaScript:访问iframe的内容


就获取元素的HTML而言,这行得通,但是如何为所选元素添加CSS类呢?$(“#iframeDiv”)。contents()。find(“ [tokenid =” +令牌+“]”)。addClass(“ border”); 似乎不起作用。
cycero 2011年

1
您是否收到任何权限被拒绝的错误?您能给我iframe的html吗?
Kevin Bowersox

不,没有权限被拒绝的问题。
cycero 2011年

20

当您的文档准备就绪时,这并不意味着您的iframe也准备就绪,
因此您应该监听iframe加载事件,然后访问您的内容:

$(function() {
    $("#my-iframe").bind("load",function(){
        $(this).contents().find("[tokenid=" + token + "]").html();
    });
});

-3

如果案例是通过控制台(例如Chrome Dev Tools)访问IFrame,则可以通过下拉列表选择DOM请求的上下文(参见图片)。

Chrome开发人员工具-选择iFrame


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.