我有下一个HTML:
<label for="user_name">
<abbr title="required">*</abbr>
Name
</label>
我想用jquery将标签标题更改为Title
。所以我做了
$('label[for=user_name]').html('Title')
它取代所有内部html(带abbr
标签)
那么,只更换Name
的最简单方法是什么?
答案 0 :(得分:71)
如果使用contents()
方法,它也会返回文本节点。由于jQuery没有文本节点方法,因此将最后一个节点转换为DOM节点
$('label[for="user_name"]').contents().last()[0].textContent='Title';
答案 1 :(得分:44)
对于迟到的回复感到抱歉......但是这里有一种只使用jQuery的方法:
$('label').contents().last().replaceWith('Title');
答案 2 :(得分:3)
的 It may not be the prettiest way, but this works: 强> 的
var $label = $('label[for=user_name]');
$label.html($label.html().replace("Name", "Title"));
答案 3 :(得分:1)
您只能选择abbr
元素,存储它,然后用存储的元素和更改的标题替换整个内容:
$('label[for="user_name"]').each(function(){
var a = $(this).children('abbr');
$(this).html(a).append('Title');
});
请参阅 fiddle
答案 4 :(得分:1)
您可以使用replace
完成此操作
var html = $('label[for=user_name]').html().replace('Name','Testing');
$('label[for=user_name]').html(html);
答案 5 :(得分:1)
将Evans解决方案添加到jquery fn以使其使用舒适:
// get/change node content not children
jQuery.fn.content = function( n ){
var o = $(this).clone();
var c = o.children().remove();
if (typeof n === "string" ){
o.html(n);
$(this).html(c).append(n);
}
return o.html();
}
用法:$('myselector').content('NewContentString');
答案 6 :(得分:1)
这是适用于大多数浏览器的解决方案
$('label[for="user_name"]').contents().last()[0].nodeValue = 'Title';
由于不支持textContent,因此这个问题接近但在ie8中出现了问题
$('label[for="user_name"]').contents().last()[0].textContent='Title';
答案 7 :(得分:0)
如果您正在操作多个标签,则可以选择每个标签并用jquery替换文本:
$('label[for="user_name"]').contents().last().replaceWith("Title");
和第二个标签:
$('label[for="user_lastname"]').contents().last().replaceWith("Title2");
依旧......