相关疑难解决方法(0)

为什么nodelist没有forEach?

我正在编写一个简短的脚本来更改<abbr>元素的内部文本,但发现它nodelist没有forEach方法.我知道这nodelist不会继承Array,但似乎不是forEach一个有用的方法吗?是否有一个具体的实施问题,我没有意识到阻止添加forEachnodelist

注意:我知道Dojo和jQuery都有forEach某种形式的节点列表.由于限制我无法使用.

javascript arrays foreach dom

85
推荐指数
7
解决办法
5万
查看次数

JS 中可迭代和可枚举有什么区别?我正在经历 For/of 和 For/In 循环,这些术语经常出现

我在研究 For/in 和 For/of 循环时遇到术语 Iterable 和 Enumerable。对象应该是可枚举的,我们必须使用 For/in 循环来循环对象的属性,并使用 For/of 来循环数组和字符串。我无法理解这两个术语。这两者有什么区别?

javascript iterable enumerable for-in-loop for-of-loop

10
推荐指数
2
解决办法
4689
查看次数

使用forEach方法迭代NodeList

我想使用forEach方法迭代NodeList,我搜索了该方法,我发现解决方法是将NodeList转换为数组:

var nodesArray = Array.prototype.slice.call(nodeList);
nodesArray.forEach(function(node) { 
    //...
})
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我们使用这种Array.prototype.slice方法?

javascript foreach nodelist slice htmlcollection

6
推荐指数
1
解决办法
2656
查看次数

遍历 NodeList

我正在寻找一种面向未来的方法来迭代 NodeList (即来自element.querySelectorAll(selector))以及跨浏览器兼容。之前我一直在使用 ES6 Spread 功能,但是 IE 不支持 spread,所以我使用了 shim。我觉得这有点矫枉过正而且效率低下。然后我遇到了 hack Array.prototype.forEach.call。它有效,但对我来说看起来很臭。

迭代 NodeList 的最佳方法是什么?

我偏向于向后兼容性和干净的代码,但如果您的答案也适用于下面的任何其他标准,我们将不胜感激。

  1. 可读性
  2. 面向未来
  3. 速度

我研究了JavaScript 通过 NodeList 进行迭代,其中介绍了一些方法。不过,不用担心可读性、兼容性等问题,只要能用就行。

我遇到的一些方法是:

const elems = document.querySelectorAll('img');

[].forEach.call(elems, function (o) { console.log(o) });

[...elems].foreach(function (o) { console.log(o) });

for (var i = 0; i < elems.length; i++) {
    console.log(elems[i]);
}

for (var i = elems.length - 1; i >= 0; i--) {
    console.log(elems[i]);
}

// User-defined
var forEach = function (array, callback, scope) { …
Run Code Online (Sandbox Code Playgroud)

javascript cross-browser nodelist

5
推荐指数
1
解决办法
3146
查看次数

循环遍历节点列表 JS

我的问题是:我正在尝试通过 Hot 类的 NODELIST 。我想将他们的 className 更改为 'cool' 。当我使用 for 循环时,它的第二个 li 似乎没有改变颜色。有谁知道我在这里犯了什么错误,第二个 li 元素没有改变颜色。

谢谢

var elements = document.getElementsByClassName('hot');
var i;

for(i = 0; i < elements.length; i++) { 
  elements[i].className = 'cool';
}
Run Code Online (Sandbox Code Playgroud)
*{
  box-sizing: border-box;
}
.hot {
  background-color: red;
  border: 1px solid black;
  padding: 10px;
  margin-top: 1px;
  font-size: 25px;
  list-style-type: none;
}

.cool {
  background-color: blue;
  padding: 10px;
  color: white;
  font-size: 25px;
}
Run Code Online (Sandbox Code Playgroud)
<html>
  <body>
   <div id="page">
      <h1 id="header">List</h1>
      <h2>Buy Greoceries</h2>
      <ul>
         <li id="one" class="hot"><em>Fresh</em>figs</li>
         <li id="two" …
Run Code Online (Sandbox Code Playgroud)

html javascript css

1
推荐指数
1
解决办法
4205
查看次数