0

过去,我可以通过内联样式标签修改页面上的 CSS。我知道这听起来很可怕,但它适用于自定义 CSS 编写,同时使用一种所见即所得(虽然不是文本)。

我曾经做过类似的事情: tag.styleSheet.cssText = myrules;

我不知道确切的时间,但是当我尝试这个时,IE 在某些时候开始说“无效参数”。真正的症结在于,在任何其他浏览tag.innerHTML = 'body {}'Unable to set value of the property 'innerHTML': object is null or undefined中都不会发生这种情况。

编辑

需要明确的是,我使用的是内联样式标签。我不想使用内联样式属性。

<style type="text/css" id="mytag"></style>

如何更改该标签的内部?

编辑 2 请看这个小提琴:

http://jsfiddle.net/tTr5d/

看来我的 tag.styleSheet.cssText 解决方案与使用 styleSheets 属性相同。您可以注释掉 cssText 的最后一个定义,以查看它是否按照@Teemu 的建议工作。所以现在我真的迷失了为什么它在我的应用程序中不起作用。如果有人有想法可以破坏该功能,那就太好了。与此同时,我将修补我的应用程序。

4

4 回答 4

6

IE 仅限于 32 个样式表。我显然喜欢忘记这个事实,它似乎包括内联样式标签,位于<link>.

我更改了沙箱以打开缩小功能,以便将文件放在一起。

然后我的代码工作了。

所以看起来当你超过限制并通过 JS 插入时,在你尝试我所做的之前你不会得到真正的错误。

于 2012-06-11T23:06:04.940 回答
1

styleSheet只能通过styleSheets集合(或imports集合)获取对对象的引用。如果你直接引用style元素,你只会得到一个 HTML 元素。(检查简单for..in循环中两个对象的属性,并查看差异)

这适用于所有 IE,并立即呈现结果:

document.styleSheets['mytag'].addRule('BODY', 'background-color:red');

MSDN中的更多信息:styleSheet 对象

于 2012-06-11T20:07:54.403 回答
0

您可以使用 jQuery。如果是内联样式,可以使用.attr()函数。

$("#myElement").attr('style')

否则,您可以看到.css()必须提供的内容。您可以使用它来获取和设置各种 CSS 样式。

其他与 CSS 相关的 jQuery 方法

于 2012-06-11T18:28:23.483 回答
0

在样式元素和 IE 的 innerHTML 方面,我从来没有太多的运气。dom 方法更可靠,即使你需要为 IE 分支;

没有 jquery-

function addNewStyle(str, title){
    var el= document.createElement('style');
    if(title) el.title= title;
    if(el.styleSheet) el.styleSheet.cssText= str;
    else el.appendChild(document.createTextNode(str));
    document.getElementsByTagName('head')[0].appendChild(el);
    return el;
}
于 2012-06-11T19:13:53.907 回答