我试图在每个()中替换输入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>
答案 0 :(得分:4)
.replace
仅替换搜索字符串的第一个实例。如果要替换所有实例,则必须使用带有g
(全局)标志的正则表达式:
.replace(/id_target/g, 'something_else')
答案 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
,以便它会替换它找到的所有匹配项。不只是第一个