JavaScript:For循环无法正常工作
JavaScript: For-Loop not working properly
我得到了以下代码(我从这里得到的):
$( "p" ).children().andSelf().contents().each( function () {
if ( this.nodeType == 3 ) {
var $this = $( this );
var regEx = /('w)/g;
for(i = 0; i < 5; i++){
$this.replaceWith( $this.text().replace( regEx, "<span class='numbers"+ i +"'>$&</span>" ));
}
}
});
这是一个运行良好的函数的一部分。只有当我为Loop添加时,它才会失败。
问题:当我console.log(i)
时,它按预期递增。当我alert(i)
时,它会提醒0-4六次。此外,i
没有添加到numberX
类中。查看DOM,i
始终为零。循环出了什么问题?
在for
循环中,当i==0
时,DOM中的this
已被新的<span>
元素替换,但在JavaScript上下文中,this
仍然引用原始元素。这就是为什么进一步的替换不起作用,并且类被困在0
。
例如,假设您的原始元素是<div>
:
i | this | The same place in DOM
======|=======|======================================
- | <div> | <div>
0 | <div> | replaced by <span class="number0">
1...5 | <div> | <span class="number0"> (not affected)
因为在i==0
之后,这已经脱离了DOM。因此,进一步的更换不起作用。
纠正代码的方法是:
$("div").children().andSelf().contents().each(function(index,item){
if (this.nodeType == 3) {
var $this = $(item);
var arr=$this.text().match(/('w)/g);
arr.forEach(function(item,i,a){a[i]=item.replace(/(.*)/, "<span class='number"+i+"'>$&</span>");});
$this.replaceWith(arr.join(""));
}
});
http://jsfiddle.net/KVm9C/
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作