XIANFESchool / FE-problem-collection

前端问题收集和知识经验总结
https://github.com/ShuyunXIANFESchool/FE-problem-collection/issues
63 stars 22 forks source link

为什么我获取不到这个css样式?js原生获取css样式总结 #30

Open mayufo opened 8 years ago

mayufo commented 8 years ago

还是自己遇到的一个坑的总结吧!与其说是坑不如说自己学艺不精,让我先哭一会!!

需求

简单就是获取一个css的height

(好吧 就是一个这么简单的需求)

实践

好吧 长时间的JQ 我已经对原生无能了 让我默哀3秒!!!

document.querySelector('.className').style.height;

这个果然不生效 好吧 看来我真的倒退不少!让我再哭一会!!(哭你妹 快去总结)

在学习中发现 其实js原生获取css的方法很多,上面写的就是其中一种,只不过情景不对啊!

getComputedStyle

简单来说 读出你八辈祖宗的一个方法。

看到伪元素、我就懵逼了 我只知道伪类啊 这有神马区别?

伪元素 其实就是 ::before :: after :: first-line ::first-letter ::content 等等 伪类 :hover :link :first-child :active 等等

var oImg = document.getElementById('photo');

window.getComputedStyle(oImg, null).height;

dom.style

var oImg = document.getElementById('photo');

oImg.style.height;  // 只能获取css 样式表的

currentStyle

var oImg = document.getElementById('photo');

oImg.currentStyle.height;  // 只能获取css 样式表的

getPropertyValue和getAttribute

var oImg = document.getElementById('photo');
var oStyle = oImg.currentStyle? oImg.currentStyle : window.getComputedStyle(oImg, null); 
oStyle.getPropertyValue("background-color")
oStyle.getAttribute("backgroundColor")

总结

如果我想获取某个属性值可以 比如高度 ? (dom.currentStyle? dom.currentStyle : window.getComputedStyle(dom, null)).height;

如果是复合的某个属性获取? (oImg.currentStyle? oImg.currentStyle : window.getComputedStyle(oImg, null)).getPropertyValue("background-color")

如果我想给这个属性重新设置这个高度? 可以先用上面方法取到,然后用 dom.style.height = XX + 'px'; 如果是复合的属性值,请注意是驼峰的写法!

其实在看了这些以后,我用了上面的这个方法我依然没有获取到这个图片的高度?为什么啊 ?

因为图片存在一个加载的问题,你刚进来获取当然无法获取到? 其实可以用onload事件来解决,具体还有其他更多的方法。

mmmaming commented 8 years ago

所以最终获取不到样式的原因是图片加载的问题导致的?。。。你这个标题炫技党。

mayufo commented 8 years ago

@mmmaming 被你发现了