为什么JQuery只影响第一个div元素?

我正在使用“replace”function删除一个div中的所有非数字值。

看来Jqueryreplace只影响第一个元素。

这里是我的JQuery:

$('#comment').each(function() { var thz = $(this); var repl = thz.html(thz.html().replace(/\D+/g, '')); }); 

HTML代码:

 <a id="comment1" href="#"> c2fđf011. </a> <a id="comment1" href="#"> c20ff113. </a> <a id="comment1" href="#"> c201gf76341. </a> 

结果:

2011年c20ff113。 c201gf76341。

我想要的结果是:

2011 20113 20176341

你有重复的id,这是无效的,也是jQuery IDselect器(或任何其他IDselect器,如内部jQuery使用的document.getElementById,因为带有ID的元素由大多数浏览器索引,并意味着是唯一的)将只返回第一个出现在DOM中。 改变它到课堂上,看看它的工作:

 $('.comment').each(function() { var thz = $(this); var repl = thz.html(thz.html().replace(/\D+/g, '')); }); 

HTML

 <a class="comment1" href="#"> c2fđf011. </a> <a class="comment1" href="#">c20ff113. </a> <a class="comment1" href="#"> c201gf76341. </a> 

顺便说一下你的id是这样的:

 <a id="comment1" href="#"> c2fđf011. </a> <a id="comment2" href="#">c20ff113. </a> <a id="comment3" href="#"> c201gf76341. </a> 

从属性select器开始将帮助你(但是,从字面上来看,这会降低你的速度,因为这是一个属性select器,失去了使用ID的好处)。

 $('[id^=comment]').each(function() { // While using this better give a container context $('[id^=comment]', 'container').each(function... var thz = $(this); var repl = thz.html(thz.html().replace(/\D+/g, '')); }); 

演示

道德:身份证必须是唯一的

在HTML页面中的ID应该是唯一的

这就是它只针对find的元素的第一个实例的原因。

用类代替元素

 $('.comment').each(function() { // Your code }); 
 $('.comment').each(function() { var thz = $(this); var repl = thz.html(thz.html().replace(/\D+/g, '')); }); 

将id commentreplace为一个类comment

如果您在元素上多次使用ID,则select器将仅select具有该ID的第一个元素。

但是当你使用类时,select器将会select所有具有该类的元素。

如果你真的不想改变HTML,你可以使用select器的属性。 但正如其他人所build议的,使用class而不是id是这里最好的select。

 $('div[id="comment"]').each(function(){})