1

我只是想知道是否有编写此代码的速记方式:

allJobs[0].style.display = 'none';
allJobs[1].style.display = 'none';
allJobs[3].style.display = 'none';

我试过这种方式,但它只隐藏最后一个值而不是它之前的值:

allJobs[0, 1, 3].style.display = 'none';

我不能真正使用经典的 for 循环解决方案,因为某些数组元素被跳过并显示。谢谢。

编辑: 我有超过 3 个显示没有我只是想让问题简单,我没那么懒惰写 3 行!

4

4 回答 4

7
[0, 1, 3].forEach(function(d) {
    allJobs[d].style.display = 'none';
});

虽然不可否认,只有三个元素,但这并不短......

于 2013-04-29T20:38:15.947 回答
4

虽然其他示例将支持较新的浏览器,但这应该适用于全面:

var indexes = [0, 1, 3];

for(var i = 0; i < indexes.length; i++) {
    allJobs[indexes[i]].style.display = 'none';
}
于 2013-04-29T20:40:37.690 回答
1

这是另一种方法:

function setStyle(element, cssAttrib, cssValue) {
  element.style[cssAttrib] = cssValue;
}

var indexes = [ 0, 1, 3 ];
for ( var i = indexes.length-1; i > -1; i-- ) // Loop Backwards For Constant Comparison
{
  setStyle(allJobs[i], "display", "none");
}

请注意,调用 setStyle 会导致类似于 forEach 方法的函数调用惩罚。如果性能是一个问题,您可以考虑内联您的样式更改。

var indexes = [ 0, 1, 3 ];
for ( var i = indexes.length-1; i > -1; i-- ) // Loop Backwards For Constant Comparison
{
  allJobs[i].style.display = none;
}
于 2013-04-29T21:28:35.027 回答
1

以下是我的做法:

function setHidden() {
    for (var i = 0; i < arguments.length; i++) allJobs[arguments[i]].style.display = 'none';
}

setHidden(0, 1, 3);

这种特殊方法避免了对每个元素(如Array.forEach)进行昂贵的函数调用。

于 2013-04-29T20:46:02.993 回答