尝试使用javascript(IE8中的innerHTML)添加样式标记
这在IE8中不起作用。我认为是innerHTML导致了这个问题。如何解决尝试使用javascript(IE8中的innerHTML)添加样式标记,javascript,internet-explorer,innerhtml,Javascript,Internet Explorer,Innerhtml,这在IE8中不起作用。我认为是innerHTML导致了这个问题。如何解决 // jQuery plugin (function( $ ){ $.fn.someThing = function( options ) { var d = document, someThingStyles = d.createElement('style'); someThingStyles.setAttribute('type', 'text
// jQuery plugin
(function( $ ){
$.fn.someThing = function( options ) {
var d = document,
someThingStyles = d.createElement('style');
someThingStyles.setAttribute('type', 'text/css');
someThingStyles.innerHTML = " \
.some_class {overflow:hidden} \
.some_class > div {width:100%;height:100%;} \
";
d.getElementsByTagName('head')[0].appendChild(someThingStyles);
});
};
})( jQuery );
jQuery
由于您已经在使用jQuery,请使用:
$('<style type="text/css">' +
'.some_class {overflow:hidden}' +
'.some_class > div {width:100%;height:100%;}' +
'</style>').appendTo('head');
您应该查看CSSOM(CSS对象模型)规范-
如果没有使用jquery,即在版本9之前通过将css字符串指定给styleelement.styleSheet.cssText写入样式元素,您可能会对
CSSRule
对象的cssText
属性感兴趣
其他浏览器(包括IE9+)允许您将文本节点直接附加到元素
function addStyleElement(css){
var elem=document.createElement('style');
if(elem.styleSheet && !elem.sheet)elem.styleSheet.cssText=css;
else elem.appendChild(document.createTextNode(css));
document.getElementsByTagName('head')[0].appendChild(elem);
}
谁以这种方式使用样式和jquery?使用类和/或
.css
为什么将纯JS与jQuery结合使用?jQuery是为了解决这样的跨浏览器问题而创建的。您缺少var
和代码>var d=文档;var someThingStyles=d.createElement('style')
@gdoron:动态生成样式规则非常有用。此外,您还可以使用一条var
语句定义多个变量,OP已经在这样做了。@gdoron-什么?Javascript允许您通过var
和,
分配变量列表,因此var x=1,y=2,z=3
是一个完全有效的声明。我遇到的一个警告是:在我将元素添加到DOM之前,IE8中的elem.styleSheet对我来说是空的,因此我必须将标记内容的设置移到代码末尾,在document…appendChild之后。只有显式添加.setAttribute('type','text/css')时,这才有效“
在检查elem.styleSheet
之前。您可以使用document.head.appendChild
和style.type=…
而不是这么长的code@vsyncdocument.head
仅在IE9(和Firefox 4;在编写答案时,仍有大量的FF 3.6用户)之后才得到支持。设置类型是可选的(在HTML5中,它默认为text/css
)。如果您不需要担心与旧IE的兼容性,那么您可以使用var style=document.createElement('style');style.textContent='。。。样式表在这里;document.head.appendChild(样式)代码>仅供注意:在设置cssText之前先添加确实很重要!奇怪的情况下,这是必要的,但它是重要的。
function addStyleElement(css){
var elem=document.createElement('style');
if(elem.styleSheet && !elem.sheet)elem.styleSheet.cssText=css;
else elem.appendChild(document.createTextNode(css));
document.getElementsByTagName('head')[0].appendChild(elem);
}