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

10

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

似乎Jquery的replace函数只影响第一个元素。

这是我的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 20113 20176341

4个回答

30

您有重复的id,这是无效的。jQuery ID选择器(或任何其他ID选择器,例如document.getElementById,因为具有ID的元素被大多数浏览器索引并且应该是唯一的)将仅返回在DOM中出现的第一个元素。将其更改为class,然后查看它是否正常工作:

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

超文本标记语言

<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>

以属性选择器开头会有帮助(但会明显减慢速度,因为这是一个属性选择器,会失去使用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, ''));
});

演示

道理:ID必须是唯一的


17

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

这就是为什么它只针对找到的元素的第一个实例。

而应该使用具有相同类的元素替换它们

$('.comment').each(function() {
       // Your code
});

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

将ID为comment的元素替换为类名为comment的元素。

如果你在多个元素上使用相同的ID,选择器只会选取第一个具有该ID的元素。

但是,如果你使用类名,选择器将会选取所有具有该类名的元素。


4

如果您真的不想更改html,可以使用属性选择器。但正如其他人建议的那样,在这里使用class而不是id是最好的选择。

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

1
我想分享的只是这是可能的。 - Fazle Rabbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接