使用 jQuery 在 iframe 中选择一个元素

IT技术 javascript iframe getelementbyid
2021-01-13 19:35:45

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

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

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

谢谢。

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

另请注意,如果src此 iframe 的 指向不同的域,出于安全原因,您将无法在 javascript 中访问此 iframe 的内容。

@cycero,我已经更新了我的答案。试试通过iframe.contents()
2021-03-19 19:35:45
@cycero,它应该可以工作。你是动态生成这个 iframe 吗?不要忘记,如果您出于安全原因将此 iframe 的 src 元素指向另一个域而不是您的域,则您将无法访问其内容。
2021-03-29 19:35:45
我不是从不同的域加载它,而是从同一个文件夹中加载它。iFrame 内容正在动态生成并作为文件存储在服务器上。然后该文件正在 iFrame 中加载。
2021-04-07 19:35:45
请记住 $('iframe') 不会直接返回 iframe。你需要把它从数组中拉出来。
2021-04-08 19:35:45
感谢您愿意提供帮助。但这似乎不起作用。
2021-04-10 19:35:45

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

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

将您的选择器放在 find 方法中。

但是,如果 iframe 不是来自您的服务器,这可能是不可能的。其他帖子讨论了权限被拒绝的错误。

jQuery/JavaScript:访问 iframe 的内容

您是否收到任何权限被拒绝的错误?你能给我iframe的html吗?
2021-03-15 19:35:45
不,没有权限被拒绝的问题。
2021-03-20 19:35:45
这在获取元素的 HTML 方面是有效的,但是如何向该选定元素添加 CSS 类?$("#iframeDiv").contents().find("[tokenid=" + token + "]").addClass("border"); 似乎不起作用。
2021-03-30 19:35:45

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

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

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

Chrome 开发工具 - 选择 iFrame

这是一个简单的 JQuery 来做到这一点,使 div 可在仅容器中拖动:

$("#containerdiv div").draggable( {containment: "#containerdiv ", scroll: false} );