【问题标题】:Changing CSS-property of all elements in array [closed]更改数组中所有元素的 CSS 属性 [关闭]
【发布时间】:2015-06-26 22:40:30
【问题描述】:

我想在一些<div id="div"> 中更改所有<time> 元素中的.style.backgroundColor。 我是这样解决的:

var times = div.getElementsByTagName("time");
for (var i = 0; i < times.length; i++) {
    times[i].style.backgroundColor = "#d00";
}

是否可以优化代码以尽可能减少变量?或者也许有一种方法可以用一行来做到这一点?
P.S.:不使用 JQuery;

【问题讨论】:

  • 不,在普通的 JS 中,我认为没有任何替代方法可以不使用循环遍历所有此类元素。
  • @Harry 我认为 OP 没有问是否有任何替代方式 没有循环 他只是问了更优雅的方式并且不使用 jQuery
  • @Almis:公平点。但我仍然认为,从外行的角度来看,循环比切片、调用和映射更具可读性和可理解性。绝不是嘲笑你的回答,只是个人喜好。
  • 您的问题包含一个逻辑上的不合理之处,因为它暗示 jQuery 解决方案可能首先被认为更优雅。
  • @torazaburo,我只是不知道 JQ。所以基于它的答案对我没有帮助:)

标签: javascript html css arrays for-loop


【解决方案1】:

在 ES6 环境中:

Array.from(div.querySelectorAll("time"), e => e.style.backgroundColor = "#d00");

这利用了Array.from 将 DOM 节点列表转换为数组的能力,采用第二个参数,该参数是应用于每个元素的函数。

【讨论】:

  • 只是为了理解,这在性能方面更好(或)在更少的代码行方面更好?如果您也可以添加一些详细信息,我认为这将是一个更好的答案。
  • 无法对性能发表评论,我强烈怀疑会有任何重大差异,而且可能没关系。是的,显然它更紧凑。
  • 感谢您的澄清。我不知道这种方法,这就是为什么要检查:)
【解决方案2】:

另一种方法是使用反向 while 循环,如下所示:

var times=div.getElementsByTagName("time"),i=times.length;
while(i--)
    times[i].style.backgroundColor="#d00";

【讨论】:

  • 而这样做的好处是....??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2012-04-04
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多