jQuery:查找并替换所有属性

时间:2013-02-08 06:21:12

标签: jquery dom

我试图在每个()中替换输入id的属性的特定部分和属性的标签。但是,当我检查渲染时,只有输入id的属性已更改为id =“something_else_ [name]”,但是对于=“id_target_ [name]”,属性的标签保持不变。

我做错了什么?

jQuery的:

$(window).bind('load', function() {
    $('.target').each( function() { 
        $(this).html($(this).html().replace('id_target','something_else'));
    });
});

标记:

<div class="target">
<input id="id_target_Bob" type="checkbox">
<label for="id_target_Bob">Target Bob</label>
</div>

结果:

<div class="target">
<input id="something_else_Bob" type="checkbox">
<label for="id_target_Bob">Target Bob</label> <!-- why is this left unchanged? -->
</div>

4 个答案:

答案 0 :(得分:4)

.replace仅替换搜索字符串的第一个实例。如果要替换所有实例,则必须使用带有g(全局)标志的正则表达式:

.replace(/id_target/g, 'something_else')

http://jsfiddle.net/ExplosionPIlls/cV6pw/

答案 1 :(得分:2)

正则表达式g是您需要的

试试这个

 $(this).html($(this).html().replace(/id_target/g,'something_else'));

答案 2 :(得分:2)

您只需更新属性即可。这将在目标div中找到所有输入和标签标签并替换它们的属性:

<强> HTML:

<div class="target">
  <input id="id_target_Bob" type="checkbox">
  <label for="id_target_Bob">Target Bob</label>
</div>

<强>使用Javascript:

$(document).ready(function () {
    $('div.target').each(function () {         
        $('input').attr('id', 'something_else');
        $('label').attr('for', 'something_else');
    });
});

提示:

为了获得更好的性能,您应该始终在您的班级前面加上它所属的标签。 jQuery中第二快的选择器是Tag选择器,因为它映射到本机Javascript方法getElementsByTagName()

不要使用$('.target').each(function () {...,而是$('div.target').each(function () {...

答案 3 :(得分:1)

因为它只是替换了你告诉脚本这样做的第一次出现

您需要使用/id_target/g,以便它会替换它找到的所有匹配项。不只是第一个