使用 jQuery 设置 iFrame 样式

Posted

技术标签:

【中文标题】使用 jQuery 设置 iFrame 样式【英文标题】:Using jQuery to Style iFrame 【发布时间】:2011-05-25 20:52:21 【问题描述】:

我在这里阅读了大约十几个类似的问题,并尝试了我能想到的一切,但我显然做错了,因为我无法让它发挥作用。

HTML

<iframe name="posts" id="posts" src="edit.php">

JS

$(document).ready(function() 
    $('iframe#posts').ready(function() 
        var frame = $('iframe#posts').contentDocument;
        console.log($('#adminmenu', frame));
        $('#adminmenu', frame).css('display', 'none !important');
    );
);

控制台正在输出:

[<ul id=​"adminmenu" style=​"display:​ none !important;​ ">​…​</ul>​]

这是正确的元素。但是,display:none 从未在浏览器中应用。另外,我觉得奇怪的是控制台输出的是内联样式,即使它是在 console.log() 语句之后设置的(不确定这是否相关,但似乎不应该)。

有人知道为什么这不起作用吗?

我还应该补充一点,主文档正文中也有一个&lt;ul id="adminmenu"&gt;,但我认为通过提供 iframe 上下文,它应该以 iframe 为目标。

【问题讨论】:

我认为您不应该在 css 属性中使用 !important 也许这是一个时间问题?也许内部 iframe 尚未加载?您可以通过添加 alert() 来尝试 是的,我试过不带 !important 但它也不起作用,所以我想我会暴力破解它。 回复。时机 - 这就是为什么我将它包装在 $('iframe#posts').ready() 中。也许这不符合我的想法? 【参考方案1】:

您是否尝试过使用 jQuery 的 contents() 函数而不是 contentDocument

$("iframe#posts").contents().find("#adminmenu").hide();

更新:将.css("display", "none !important") 更改为简单的.hide()

【讨论】:

我可以发誓我试过了,但它不起作用......但现在它是 :) 谢谢!【参考方案2】:

对于 iframe,请尝试使用“加载”方法而不是“就绪”方法。另外,使用 'contents()' 而不是 'contentDocument' 来获取 iframe 的内容。

$(document).ready(function() 
    $('iframe#posts').load(function() 
        var frame = $('iframe#posts').contents();
        /* other code */
    );
);

【讨论】:

当事情看起来很暗淡时,我开始走这条路,但我遇到了另一个问题。 “iframe”中的链接现在加载完整的浏览器,但我希望它们也保持“框架”。对此有何建议?我什至开始劫持链接以使它们在“框架”中打开,但是对于点击事件和其他未知数,这似乎几乎是不可能的。

以上是关于使用 jQuery 设置 iFrame 样式的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 Wordpress 中的 17Hats iFrame 中进行样式设置

js控制iframe内部css样式

如何使用 jquery 从 IFrame 本身更改 IFrame 样式?

js怎么删除css的行内样式

jQuery核心

使用纯 JavaScript/JQuery 的 iframe 的后退和前进控制