为什么我不能更改已定义元素的className

时间:2016-02-10 11:08:20

标签: javascript arrays undefined classname

我只想删除一些元素,而不使用像jQuery这样的任何框架。 首先,我尝试使用for(... in ...)而不是将ist更改为for(var i ...)但现在我发现即使是直接选择也不起作用。

使用jQuery可以正常工作。但它是......让我们说解释jQuery的作用。

我的剧本:

$(".photo").on('click', function() {
      this.src = this.src.replace(/thumb/g, 'original');
      var img = new Image();
      img.onload = function() {
        alert(this.naturalWidth);
      }
      img.src = this.src;
    }

控制台日志:

[109] <script>
[110]   var hidden = document.getElementsByClassName('hidden');
[111]   console.log('Class "hidden" size: ' + hidden.length);
[112]   console.log(hidden[0].tagName);
[113]   console.log(hidden[1].tagName);
[114]
[115]   hidden[0].className = '';
[116]   hidden[1].className = '';
[117] </script>  

为什么我可以获取Class "hidden" size: 2 H1 FORM Uncaught TypeError: Cannot set property 'className' of undefined(anonymous function) @ login.html:116 的tagName,但不能更改其className,而是hidden[1]

当我将订单更改为

hidden[0]

所以[115] hidden[1].className = ''; [116] hidden[0].className = ''; hidden[1]工作之前。

当第一个选定元素被更改并且元素的hidden[0]变小时,var hidden = document.getElementsByClassName('hidden');将会第二次运行。

1 个答案:

答案 0 :(得分:3)

Error in results[i, j] <- colSums(A[i:(i + 2), 1:2] * B) : number of items to replace is not a multiple of replacement length 返回 live NodeList,这意味着它包含的元素会随着DOM的变化而变化。您从该集合中的元素中删除相关的类名称,该元素将自动从集合中删除。

出于这个原因,你应该向后迭代元素:

 moment.locale('en',
    {
       week: {
               dow: 1 // Monday is the first day of the week
            }
 });

在第一次迭代中,集合将包含2个元素(在索引0和1处)。您从索引1处的元素中删除该类,并从集合中删除该元素。在下一次迭代中,集合中只剩下一个元素,但由于.startOf('week') 已递减为0,因此您可以正确引用它。

修改

根据评论中的建议,您也可以反复修改startOf('isoweek')

getElementsByClassName