当前位置: 首页 > 面试题库 >

如何强制WebKit重绘/重绘以传播样式更改?

朱宇航
2023-03-14
问题内容

我有一些琐碎的JavaScript可以实现样式更改:

sel = document.getElementById('my_id');
sel.className = sel.className.replace(/item-[1-9]-selected/,'item-1-selected');
return false;

在最新版本的FF,Opera和IE上可以正常使用,但在最新版本的Chrome和Safari上无法使用。

它影响了两个后代,它们恰好是兄弟姐妹。第一个同级更新,但第二个不更新。第二个元素的子元素也具有焦点,并包含 < a>标记,该标记在
onclick 属性中包含上述代码。

如果我微调(例如取消选中和选中) 任何 元素的 任何 属性,则在Chrome“开发人员工具”窗口中,第二个兄弟姐妹将更新为正确的样式。 __

是否有一种解决方法可以轻松地以编程方式“推动” WebKit做正确的事情?


问题答案:

我发现了一些复杂的建议,许多简单的建议都行不通,但是Vasil Dinkov对其中一个进行了评论,提供了一个简单的解决方案,可以强制重新绘制/重新绘制效果很好:

sel.style.display='none';
sel.offhtml" target="_blank">setHeight; // no need to store this anywhere, the reference is enough
sel.style.display='';

如果它适用于“ block”以外的其他样式,我会让其他人评论。

谢谢



 类似资料:
  • 由于响应于单击Set Default按钮所做的更改是更改ListView的UserData(),而不更改支持的ObservableList,因此列表不能正确地指示新的默认值。 是否有方法强制ListView重新呈现其ListCells?Android用户在这个问题上提出了成千上万个问题,但JavaFX似乎并不快乐。我可能不得不对支持数组进行“无意义的更改”来强制重绘。 我看到这是为JavaFX2.

  • 问题内容: 我在程序开始时,根据数据库中的某些内容,以编程方式在JScrollPane中添加了许多组件(JPanels,JLabels等)。 似乎对于GUI(?)而言,此过程太快了,因此JScrollPane并不总是正确更新,即,即使内部JPanel大于可见区域,滚动条也不可见。 调整窗口大小(JFrame)可以解决此问题,因为我认为Java在调整组件大小时会重新打印它们。 作为测试,我添加了一个

  • 问题内容: 我创建了一个自定义视图(我们称之为),该视图基本上只是使用画布在其自身上绘制一些文本。使用全局变量设置要绘制的文本。 在程序执行过程中的某个时候,我想更改全局变量,并重新绘制自身以更新文本。我尝试过然后,但这无济于事。我怀疑既然内的任何内容都没有改变,它认为没有理由打电话给我。是否有任何方法可以强制视图重新绘制自身,即使它认为不需要重新绘制它呢? 问题答案: 如果我在MyView内部有

  • 我的问题是,我需要制作一个不断更新的GUI,因为我得到的值可以从数据库中更改,并且我在图形区域中遇到了一些问题。 我使用Graphics2D中的Drawline和Drawstring打印数据库中的值,这些字符串和线条移动并更改值,所以我需要调用repaint();使用计时器使它们出现在jpanel中,问题是repaint();不是在绘制之前移除背景中的旧绘画,而是当我完全调整所有更新的大小时。 我

  • 基本上,从接收一个单击事件,然后我需要多次更改HTML元素,问题是WebView只显示最后一次更改,这意味着渲染不是立即进行的。 问题:如何制作

  • 有没有一种方法可以强制Flutter重画所有的窗口小部件(比如在区域设置改变之后)?