javascript dom-inject元素不会在IE中获取css样式

时间:2010-03-11 11:51:52

标签: javascript css dom-manipulation

我遇到了一个奇怪的问题,即在javascript注入一些dom元素之后,IE7中没有遵循为这些元素定义的css规则(即:不会发生这些元素的样式)。 (firefox和chrome工作正常,其他人没有测试过)

我尝试过的事情: - 清除缓存 - 没有其他css规则优先(没有'更具体'的样式等)

JS(在体内)(我在这里使用原型注射,但我认为它不相关)(关于Js:一些Jsonp技巧将照片添加到基于纬度/经度的div中)

 
<script type="text/javascript">
     function ws_results(json) {
         var div = document.createElement('div');
         div.setAttribute('class', 'pano_img_cont');
         var paras = $A(json.photos);
         paras.each(function(para){
              var img = document.createElement('img');
              img.setAttribute('src', para.photo_file_url);
              div.appendChild(img);
         });
         var cc = $('panaramio_anchor');
         Element.insert(cc.up(),{top:div});
     }
  </script>
  <script src="http://www.panoramio.com/map/get_panoramas.php?order=popularity&amp;set=public&amp;from=0&amp;to=15&amp;minx=13.375&amp;miny=52.4917&amp;maxx=13.424999&amp;maxy=52.541702&amp;size=square&amp;callback=ws_results" type="text/javascript"></script>

CSS(可以肯定的是,作为ie.css中的最后样式添加)

.pano_img_cont{ 
    display:block;  
    float:left;
    position:relative;  
    width:100%;     
    margin-left:6px;    
    margin-top:3px; 
    padding-right:5px;  
    margin-bottom:-18px; 
    white-space:normal; 
    padding:10px;   
    background:#f00;
}

.pano_img_cont img{
    display:inline-block; 
    width:67px; 
    height:55px;
    margin:0 3px 5px 3px;
    background:#eee;
    float:left;
}

任何人都知道怎么了? 也许css在dom自动更新后没有对css-styling进行“重新运行”?嗯,只是在猜这里..

感谢。

2 个答案:

答案 0 :(得分:6)

setAttribute在IE7及更低版本中被破坏。

使用

div.className = 'pano_img_cont'

代替。


IE的setAttribute实现是有效的:

HTMLElement.prototype.setAttribute = function (attribute, value) {
    this[attribute] = value;
}

...只要属性名称和DOM属性名称相同,就可以了。但是,class是JS中的保留关键字,因此该属性称为className。这在IE中打破了。

如果直接设置属性,它可以在任何地方使用。

答案 1 :(得分:0)

不要使用setAttribute,请使用jQuery的addClass方法:

http://api.jquery.com/addClass/