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

时间:2013-06-03 03:48:34

标签: javascript jquery html

我正在使用“替换”功能删除div中的所有非数字值。

似乎Jquery替换仅影响第一个元素。

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

4 个答案:

答案 0 :(得分:30)

你有重复的id,这是无效的,jQuery ID选择器(或者内部jQuery使用的任何其他id选择器,如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>

顺便提一句,你的身份是这样的: -

<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, ''));
});

Demo

道德:ID必须是唯一的

答案 1 :(得分:17)

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

这就是它仅针对找到的元素的第一个实例的原因。

元素替换为,而不是

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

答案 2 :(得分:8)

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

将标识为comment的ur元素替换为类comment

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

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

答案 3 :(得分:4)

如果你真的不想改变html,可以使用属性选择器。但正如其他人所说,使用class而不是id是最好的选择。

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