如何将烦人的“for”循环转换为“Object.keys”例程或类似例程(JSLint)
How to translate vexing 'for' loop into 'Object.keys' routine or similar (JSLint)
我试图遵循JSLint的"最佳实践",它不鼓励for
循环,建议使用Object.keys
和类似的循环。大多数for
循环都很容易转换为带有forEach
的Object.keys
,如下所示:
Object.keys(object).forEach(function (key) {
等。
还有一个真实的例子,如下所示:
var elems = document.getElementsByClassName('myClass');
Object.keys(elems).forEach(function (key) {
elems[key].style.display = 'block';
elems[key].style.visibility = 'visible';
});
但是,我对如何将以下例程转换为不使用标准for
循环的形式感到困惑。
var selection = window.getSelection();
var htmlDiv = document.createElement("div");
var i;
for (i = 0; i < selection.rangeCount; ++i) {
htmlDiv.appendChild(selection.getRangeAt(i).cloneContents());
}
我不需要迭代window.getSelection()
;我需要使用 window.getSelection()
的本机getRangeAt()
函数按范围抓取文本。
任何线索如何在不使用上述标准for
循环的情况下执行此操作?
好吧,我会成为猴子的叔叔。被JSLint规定的"Object.keys"代替"for"(参见:jslint.com/help.html#for)所误导,@guest271314建议使用一个简单的"while"循环,并通过了JSLint的标准:
while (i < selection.rangeCount) {
htmlDiv.appendChild(selection.getRangeAt(i).cloneContents());
i += 1;
}
JSLint 还坚持使用 'i += 1;' 而不是 i++;
并提供了一个基本原理(见 http://www.jslint.com/help.html#inc)。但他们没有解释为什么while
循环与"for"循环相比是可以的;有人愿意猜测吗?
相关文章:
- 多个JavaScript子例程的实时DOM显示
- 支持 JavaScript 的检查例程适用于 Chrome/Opera/IE,但不适用于 Firefox/Safari
- 更合乎逻辑的设置超时例程
- 当访问文件时,我可以自动调用例程或函数吗
- 访问Chrome'的内部gzip例程
- Django:如何将模板变量传递给JavaScript OnClick例程
- 使用“;调解员”;作为侦听块例程中的汇点
- 看不到如何将洪水填充例程更改为 DFS 例程
- 使用异步子例程对一组函数进行计时
- 使用 attributes.add 在客户端更改文本框时调用例程
- 一个按钮上的多操作与javascript例程
- Facebook 信用回调例程未调用
- 我将如何使用闭包在 C# 中重写此 JavaScript 例程
- 如何将动画例程转换为通用的、可重用的 jQuery 函数
- 鼠标左键单击与 JavaScript 中的右键单击例程冲突
- Javascript 模态窗口例程每次单击都会执行更多时间
- 使用 Node.JS 设计机器人,这些机器人以随机超时和通用例程运行
- 如何将烦人的“for”循环转换为“Object.keys”例程或类似例程(JSLint)
- 有时不会发送电子邮件(如果必须运行第一个子例程,则会跳过第二个子例程)
- DOM 何时在 Javascript 例程中重新绘制