0
function CheckavailOnload()
{
  var elems = document.getElementsByClassName('box-collateral box-related');
  var av = document.getElementsByClassName('availability in-stock');
  var x;
  for (var i = 0; i < elems.length; i++)
  {
    if (getComputedStyle(elems[i]).visibility == 'visible') 
    {
      for (var j = 0; j < av.length; j++)
      {
        av[j].style.visibility = 'visible';
        if(elems[i].offsetTop < 0)
        {
          var x = (elems[i].offsetHeight + (elems[i]).offsetTop).toString() + "px";
          alert(x);
        }
        for(m = 0;m < av.length; m++)
        {
          av[m].style.Bottom = (-x);
          return;
        }
       }
     }
   }
   for (var k = 0; k < av.length; k++)
   {
     av[k].style.visibility = 'hidden';
   }
   var divs = document.getElementsByClassName('add-to-cart');
   for(var l = 0; l < divs.length; l++)
   { 
     divs[l].style.marginTop = (-500).toString() + "px";
     divs[l].style.marginLeft = (-20).toString() + "px";
   }
}
window.onload = CheckavailOnload;

在这里,我试图移动一个段落标签,根据 div offsetTop 和 Offset height div 有 baground 图像,也有免费图像

4

1 回答 1

0

您已var x;在脚本开头声明。然后稍后您将检查:

if(elems[i].offsetTop < 0) {
    var x = (elems[i]...); // var is not recommended to be here, x has been already declared once
}

如果elems[i].offsetTop碰巧是>= 0xundefined在这一行:

av[m].style.Bottom = (-x); // Notice a typo here: should be av[m].style.bottom

最后一个表达式给你NaN. 为避免这种情况,您需要x在脚本的开头分配一个默认值,或者在其中一些数值被分配给else之后添加一个语句。ifx

同样returnfor...m-loop 似乎会破坏您的代码,循环将永远不会完成工作,其余代码将永远不会执行。

使用(-500).toString() + "px";感觉很复杂,为什么不直接使用"-500px";呢?

于 2012-12-25T17:53:08.120 回答