为什么element.style.left会返回NaN?

nto*_*end 0 javascript internet-explorer dom internet-explorer-7

我收到一个奇怪的错误,在Internet Explorer 7中,当我在浮点数上调用Math.round时,它会给我一个"无效的参数"错误.考虑以下:

var elementLeft = parseInt(element.style.left); // Here we're actually getting NaN
function Foo(x) {
  this.x = x;

  this.apply = function(element) {
    element.style.left = Math.round(this.x) + 'px';
  };
}
Foo(elementLeft);
Run Code Online (Sandbox Code Playgroud)

在这种情况下x是一个非负数,element并且只是我页面中的一个DOM元素(实际上是一个div).

有任何想法吗?

编辑:作为x参数传入的变量实际上早先初始化为parseInt(element.style.left).看来,我第一次尝试阅读element.style.left,IE实际上是在回馈NaN.我已更新代码以反映这一点.有人知道这方面的任何变通方法吗?

bob*_*nce 6

看来我第一次尝试读取element.style.left时,IE实际上是在回馈NaN.

您第一次阅读时element.style.left,left元素上是否设置了任何样式?请记住,element.style仅反映在内联style="..."属性中设置的样式属性,而不是样式表应用的样式属性.

如果你还没有设置内联样式,style.left会给你一个undefined对象,这parseInt对NaN来说确实如此.

  • IE中的`element.currentStyle`; 标准浏览器中的`document.getComputedStyle`.解析风格通常是坏消息,但你并不总是知道你将获得什么单位,转换并不是一件容易的事.对于以像素为单位测量定位,offsetLeft/Top/Width/Height/Parent属性往往更容易使用. (2认同)