Javascript 如何更改不在屏幕上的元素的CSS可见性样式?

Javascript 如何更改不在屏幕上的元素的CSS可见性样式?,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有很多数据被放入带有溢出:auto样式的中。Firefox可以优雅地处理这个问题,但是IE在滚动div和在页面上执行任何Javascript时都会变得非常缓慢 起初,我认为IE无法在其DOM中处理那么多数据,但后来我做了一个简单的测试,将可见性:hidden样式应用于超过前100个元素的每个元素。它们仍然会占用空间并导致滚动条出现。当我这样做的时候,数据不再有问题了 因此,我希望有一个“智能”div,它隐藏所有嵌套的div元素,这些元素当前在屏幕上不可见。有没有一个简单的解决方案,或者我需要一

我有很多数据被放入带有
溢出:auto
样式的
中。Firefox可以优雅地处理这个问题,但是IE在滚动div和在页面上执行任何Javascript时都会变得非常缓慢

起初,我认为IE无法在其DOM中处理那么多数据,但后来我做了一个简单的测试,将
可见性:hidden
样式应用于超过前100个元素的每个元素。它们仍然会占用空间并导致滚动条出现。当我这样做的时候,数据不再有问题了


因此,我希望有一个“智能”div,它隐藏所有嵌套的div元素,这些元素当前在屏幕上不可见。有没有一个简单的解决方案,或者我需要一个无限循环来计算滚动条的位置?如果没有,是否有一个特定的事件,我可以钩到我可以做到这一点?是否有jQuery选择器或插件允许我选择屏幕上当前不可见的所有元素?

是否要使用
display:none
而不是
visibility:hidden

使用“可见性:隐藏”隐藏的元素仍将在视口中占据其空间


至于使用“智能”div,正如您所描述的。您可能对以下内容感兴趣。

您想使用
显示:无
而不是
可见性:隐藏

使用“可见性:隐藏”隐藏的元素仍将在视口中占据其空间


至于使用“智能”div,正如您所描述的。您可能会对类似的内容感兴趣。

我能够实现问题中的目标,但在IE中没有带来太多性能提升。我重新修改了整个页面,但以下是未完成的代码,以防其他人想做类似的事情并想知道从何处开始:

//其中'child'=具有
溢出:auto
样式的
div('parent')中的元素

function isChildOnScreen(child, parent) { 
  var topOfChild = child.offsetTop;
  var bottomOfChild = child.offsetTop + child.offsetHeight;
  var topOfParent = parent.scrollTop;
  var bottomOfParent = parent.scrollTop + parent.offsetHeight;

  var makeVisible = (topOfChild >= topOfParent && topOfChild <= bottomOfParent)
    ||
    (bottomOfChild >= topOfParent && bottomOfChild <= bottomOfParent)
    ||
    (topOfChild < topOfParent && bottomOfChild > bottomOfParent);

  return makeVisible;
}
函数isChildOnScreen(子,父){
var topOfChild=child.offsetTop;
var bottomOfChild=child.offsetTop+child.offsetHeight;
var topOfParent=parent.scrollTop;
var bottomOfParent=parent.scrollTop+parent.offsetHeight;
var makeVisible=(topOfChild>=topofpparent&&topOfChild=topofpparent&&bottomOfChild-bottomOfParent);
返回使可见;
}

我能够实现问题中的目标,但在IE中并没有带来多少性能提升。我重新修改了整个页面,但以下是未完成的代码,以防其他人想做类似的事情,并想知道从哪里开始:

//其中'child'=具有
溢出:auto
样式的
div('parent')中的元素

function isChildOnScreen(child, parent) { 
  var topOfChild = child.offsetTop;
  var bottomOfChild = child.offsetTop + child.offsetHeight;
  var topOfParent = parent.scrollTop;
  var bottomOfParent = parent.scrollTop + parent.offsetHeight;

  var makeVisible = (topOfChild >= topOfParent && topOfChild <= bottomOfParent)
    ||
    (bottomOfChild >= topOfParent && bottomOfChild <= bottomOfParent)
    ||
    (topOfChild < topOfParent && bottomOfChild > bottomOfParent);

  return makeVisible;
}
函数isChildOnScreen(子,父){
var topOfChild=child.offsetTop;
var bottomOfChild=child.offsetTop+child.offsetHeight;
var topOfParent=parent.scrollTop;
var bottomOfParent=parent.scrollTop+parent.offsetHeight;
var makeVisible=(topOfChild>=topofpparent&&topOfChild=topofpparent&&bottomOfChild-bottomOfParent);
返回使可见;
}

autopager插件看起来很有趣。。。不幸的是,我没有时间尝试不同的想法来安抚IE,所以我只是删除了页面上的大部分功能。。。不幸的是,我没有时间尝试不同的想法来安抚IE,所以我只是删除了页面上的大部分功能。