检查这个小提琴:JSFiddle
HTML:
<table class="myTable">
<tr>
<th>Some text</th>
<td class="align">
<span class=" someStyle">1</span>/<span class="otherStyle">15</span>
</td>
<th>Some text</th>
<td class="align">
<span class=" someStyle">2</span>/<span class="otherStyle">16</span>
</td>
</tr>
<tr>
<th>Some text</th>
<td class="align">
<span class="">3</span>/<span class="">17</span>
</td>
<th>Some text</th>
<td class="align">
<span class="otherStyle">4</span>/<span class=" someStyle">18</span>
</td>
</tr>
<tr>
<th>Some text</th>
<td class="align">
<span class="otherStyle">5</span>/<span class=" someStyle">19</span>
</td>
<th>Some text</th>
<td class="align">
<span class="">6</span>/<span class="">20</span>
</td>
</tr>
<tr>
<th>Some text</th>
<td class="align">
<span class="">7</span>/<span class="">21</span>
</td>
<th>Some text</th>
<td class="align">
<span class=" someStyle">8</span>/<span class="otherStyle">22</span>
</td>
</tr>
<tr>
<th>Some text</th>
<td class="align">
<span class="">9</span>/<span class="">23</span>
</td>
<th>Some text</th>
<td class="align">
<span class="otherStyle">10</span>/<span class=" someStyle">24</span>
</td>
</tr>
<tr>
<th>Some text</th>
<td class="align">
<span class="otherStyle">11</span>/<span class=" someStyle">25</span>
</td>
<th>Some text</th>
<td class="align">
<span class="otherStyle">12</span>/<span class=" someStyle">26</span>
</td>
</tr>
<tr>
<th>Some text</th>
<td class="align">
<span class=" someStyle">13</span>/<span class="otherStyle">27</span>
</td>
<th>Some text</th>
<td class="align">
<span class=" someStyle">14</span>/<span class="otherStyle">28</span>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
JavaScript的:
var myTbl = document.getElementsByClassName("myTable")[0];
var tSomeStyleClasses = myTbl.getElementsByClassName("someStyle");
console.log(tSomeStyleClasses);
for (i=0;i<tSomeStyleClasses.length;i++) {
console.log(tSomeStyleClasses[i].classList);
//tSomeStyleClasses[i].classList.remove("someStyle");
}
var tOtherStyleClasses = myTbl.getElementsByClassName("otherStyle");
console.log(tOtherStyleClasses);
for (i=0;i<tOtherStyleClasses.length;i++) {
console.log(tOtherStyleClasses[i].classList);
//tOtherStyleClasses[i].classList.remove("otherStyle");
}
Run Code Online (Sandbox Code Playgroud)
并检查控制台日志.每个都有10个条目,someStyle和otherStyle.现在取消注释//tSomeStyleClasses[i].classList.remove("someStyle");并//tOtherStyleClasses[i].classList.remove("otherStyle");运行小提琴.再次检查控制台日志.应删除2 x 10个样式,但它只删除5个样式.我想知道为什么?
Poi*_*nty 11
返回的值.getElementsByClassName()是实时 NodeList.它是"实时"意味着当您更改列表中的元素时,列表本身会自动更新.因此,当您删除用于查找元素的类时,列表会变短.因为您正在使用数字索引进行迭代,所以最终会跳过元素.
处理它的一个好方法是使用一个简单的while循环,只在列表的第一个元素上操作,直到列表为空:
var tSomeStyleClasses = myTbl.getElementsByClassName("someStyle");
while (tSomeStyleClasses.length) {
tSomeStyleClasses[0].classList.remove("someStyle");
}
Run Code Online (Sandbox Code Playgroud)
因为getElementsByClassName它为您提供了匹配元素的实时列表.从索引处的元素中删除该类时0,将立即更新列表以从列表中删除该元素并将所有其他元素向下移动.因为然后递增i,现在索引0处的元素不会被处理.
或者:
向后按列表工作,或
使用document.querySelectorAll(".someStyle"),返回快照列表,而不是实时快照列表
| 归档时间: |
|
| 查看次数: |
7086 次 |
| 最近记录: |