Ответ 1
Если вы используете метод contents()
, он также вернет текстовые узлы. Поскольку jQuery не имеет текстовых методов node, преобразуйте последние node в DOM node
$('label[for="user_name"]').contents().last()[0].textContent='Title';
У меня есть следующий html:
<label for="user_name">
<abbr title="required">*</abbr>
Name
</label>
И я хочу сменить подпись надписи на Title
с помощью jquery. Поэтому я делаю
$('label[for=user_name]').html('Title')
И он заменит все внутренние html (с тегом abbr
)
Итак, что самый простой способ заменить только Name
?
Если вы используете метод contents()
, он также вернет текстовые узлы. Поскольку jQuery не имеет текстовых методов node, преобразуйте последние node в DOM node
$('label[for="user_name"]').contents().last()[0].textContent='Title';
Извините за поздний ответ... Но вот способ сделать это, используя только jQuery:
$('label').contents().last().replaceWith("Title");
Это может быть не самый красивый способ, но это работает:
var $label = $('label[for=user_name]');
$label.html($label.html().replace("Name", "Title"));
Вы можете выбрать только элемент abbr
, сохранить его, а затем заменить весь контент на сохраненный элемент плюс измененный заголовок:
$('label[for="user_name"]').each(function(){
var a = $(this).children('abbr');
$(this).html(a).append('Title');
});
Смотрите fiddle
вы можете использовать replace
выполнить
var html = $('label[for=user_name]').html().replace('Name','Testing');
$('label[for=user_name]').html(html);
проверить: http://jsfiddle.net/DyzMJ/
Решение 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');
Это решение, которое работало для большинства браузеров
$('label[for="user_name"]').contents().last()[0].nodeValue = 'Title';
Этот приблизился, но дал проблемы в ie8, поскольку textContent не поддерживается
$('label[for="user_name"]').contents().last()[0].textContent='Title';
Если вы манипулируете более чем 1 меткой, вы можете выбрать каждую метку и заменить текст на jquery:
$('label[for="user_name"]').contents().last().replaceWith("Title");
и для второй метки:
$('label[for="user_lastname"]').contents().last().replaceWith("Title2");
и т.д.