Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.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
尝试使用javascript(IE8中的innerHTML)添加样式标记_Javascript_Internet Explorer_Innerhtml - Fatal编程技术网

尝试使用javascript(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

这在IE8中不起作用。我认为是innerHTML导致了这个问题。如何解决

// 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@vsync
document.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); 
}