1

我试图在each() 中替换输入id 属性的特定部分和标签属性。但是,当我检查渲染时,只有输入 id 的属性已更改为 id="something_else_[name]",但 for 的属性的标签保持不变,如 for="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

4 回答 4

5

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

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

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

于 2013-02-08T06:23:51.840 回答
3

您可以只更新属性。这将在您的目标 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 中第二快的选择器是标签选择器,因为它映射到原生 Javascript 方法,getElementsByTagName().

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

于 2013-02-08T06:31:35.150 回答
2

正则表达式g是你需要的

试试这个

 $(this).html($(this).html().replace(/id_target/g,'something_else'));
于 2013-02-08T06:24:53.920 回答
1

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

您需要使用/id_target/g它来替换它找到的所有事件,而不仅仅是第一个

于 2013-02-08T06:24:28.263 回答