Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何在另一个页面的iFrame中动态更改HTML页面的样式表?_Jquery_Css_Inheritance_Iframe_Stylesheet - Fatal编程技术网

Jquery 如何在另一个页面的iFrame中动态更改HTML页面的样式表?

Jquery 如何在另一个页面的iFrame中动态更改HTML页面的样式表?,jquery,css,inheritance,iframe,stylesheet,Jquery,Css,Inheritance,Iframe,Stylesheet,我有一个使用jQueryUI主题的网页。在这个页面中,有一个iFrame,其中包含另一个HTML文档,该文档也使用jqueryui主题。现在,我已经制作了自己的主题选择器,我想知道最简单的方法,让它影响iFrame中的页面。例如,每当用户选择一个新主题时,我都会简单地执行以下操作: <link id="uiTheme" rel="stylesheet" type="text/css" href="ui/smoothness.css" /> $("#uiTheme").attr("hr

我有一个使用jQueryUI主题的网页。在这个页面中,有一个iFrame,其中包含另一个HTML文档,该文档也使用jqueryui主题。现在,我已经制作了自己的主题选择器,我想知道最简单的方法,让它影响iFrame中的页面。例如,每当用户选择一个新主题时,我都会简单地执行以下操作:

<link id="uiTheme" rel="stylesheet" type="text/css" href="ui/smoothness.css" />
$("#uiTheme").attr("href", "ui/" + newTheme + ".css");
其中newTheme是一个不同的字符串文本,它们都是通过一个选择框完成的,我知道这一切都是有效的,诸如此类。现在,如何更改框架中使用的工作表以匹配主页的工作表?我想我的问题是如何使用jQuery选择器获取id为innerTheme的链接,将其href属性更改为相同的样式表?此外,我甚至需要担心这一点,还是外部页面的ui主题会自动下降到框架中,而框架的页面本身不会链接到样式表


如果我的问题有点困惑,我道歉。如果需要,我可以尝试清除任何内容。

以下是一些代码,希望能对您有所帮助: 它在iframe样式表中循环切换它们的开/关

javascript: var i=0;
for(var j=0;j < window.frames.length;j++){
  cs=!window.frames[j].document.styleSheets[0].disabled;
  for(i=0;i<window.frames[j].document.styleSheets.length;i++) 
    window.frames[j].document.styleSheets[i].disabled=cs;
};
void(cs=true);

代码基于Bookmarklet来打开/关闭CSS,您不必获取对其链接元素的引用,只需添加您自己的链接元素,它就会覆盖

var link = document.createElement('link');
link.href = "http://full.domain.com/ui/smoothness.css";
link.type = 'text/css';
link.rel = 'stylesheet';
$('head', frameName )[0].appendChild(link);

但是,如果另一个框架中的任何内容来自另一个域,则您将无法修改该框架中的任何内容。因此,如果它是从同一个域提供的,只需在原始页面上进行更改可能会更容易。如果它来自另一个站点-很遗憾,你运气不好。

它们都在同一个域上吗?是的,它们都在同一个域上。最后一行代码就是我想寻找的。我不知道选择器的第二个参数是iframe的名称,而不是ID之类的。我认为类似$innerTheme、myFrame.attrref、ui/+newTheme+.css;第二个参数是选择器应该匹配的上下文。默认情况下,当为框架指定id时,将创建具有相同名称的顶级对象。您还可以使用$'head'、$'myFrameID'。这将是一种工作,尽管它似乎只是简单地切换样式表,而不是从一个包含30个不同jQuery UI主题的列表中进行选择。