Как изменить только текстовый узел в элементе
32398 просмотра
8 ответа
У меня есть следующий HTML:
<label for="user_name">
<abbr title="required">*</abbr>
Name
</label>
И я хочу изменить заголовок ярлыка на Title
jquery. Так и делаю
$('label[for=user_name]').html('Title')
И это заменить все внутренние HTML (с abbr
тегом)
Итак, какой самый простой способ заменить только Name
?
Ответы (8)
74 плюса
Если вы используете contents()
метод, он также вернет текстовые узлы. Поскольку у jQuery нет методов текстового узла, преобразуйте последний узел в узел DOM
$('label[for="user_name"]').contents().last()[0].textContent='Title';
Демо: http://jsfiddle.net/yPAST/1/
Автор: charlietfl Размещён: 31.03.2012 02:1544 плюса
Извините за поздний ответ ... Но вот способ сделать это, используя только jQuery:
$('label').contents().last().replaceWith('Title');
Автор: Dom
Размещён: 14.03.2013 05:23
3 плюса
Это может быть не самый красивый способ, но это работает:
var $label = $('label[for=user_name]');
$label.html($label.html().replace("Name", "Title"));
Автор: Code Maverick
Размещён: 31.03.2012 01:53
1 плюс
Вы можете выбрать только abbr
элемент, сохранить его, а затем заменить весь контент на сохраненный элемент плюс измененный заголовок:
$('label[for="user_name"]').each(function(){
var a = $(this).children('abbr');
$(this).html(a).append('Title');
});
Смотрите эту скрипку
Автор: m90 Размещён: 31.03.2012 01:511 плюс
Вы можете использовать replace
это сделать
var html = $('label[for=user_name]').html().replace('Name','Testing');
$('label[for=user_name]').html(html);
проверить это: http://jsfiddle.net/DyzMJ/
Автор: Jignesh Rajput Размещён: 31.03.2012 02:011 плюс
Решение 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');
1 плюс
Это решение, которое работает для большинства браузеров
$('label[for="user_name"]').contents().last()[0].nodeValue = 'Title';
Этот был близок, но дал проблемы в ie8, так как textContent не поддерживается
$('label[for="user_name"]').contents().last()[0].textContent='Title';
Автор: user2525982
Размещён: 26.06.2013 10:22
0 плюса
если вы манипулируете более чем 1 меткой, вы можете выбрать каждую метку и заменить текст на jquery:
$('label[for="user_name"]').contents().last().replaceWith("Title");
и для второго ярлыка:
$('label[for="user_lastname"]').contents().last().replaceWith("Title2");
и так далее ...
Автор: Seif Tamallah Размещён: 07.10.2015 11:35Вопросы из категории :
- jquery Прокрутка переполненных DIV с помощью JavaScript
- jquery Экранирование строк HTML с помощью jQuery
- jquery Как сравнить HTML-сущность с JQuery
- jquery Есть ли функция "существует" для jQuery?
- jquery Как удалить все параметры в окне выбора, а затем добавить один вариант и выбрать его с помощью jQuery?
- jquery Получение идентификатора элемента, который вызвал событие
- jquery Как получить результат из модального диалога в JQuery
- jquery Удалите все классы, начинающиеся с определенной строки.
- jquery Как мне остановить эффект в jQuery
- jquery Как показать загрузочный счетчик в jQuery?
- jquery Есть ли лучший способ создать объектно-ориентированный класс с помощью jQuery?
- jquery JQuery / JavaScript, чтобы заменить сломанные изображения
- jquery Выделите слово с помощью jQuery
- jquery JQuery получить текстовый текст
- jquery Регулярное выражение для соответствия неанглийским символам?
- jquery How do I detect a click outside an element?
- jquery jQuery Datepicker с вводом текста, который не позволяет вводить пользователем
- jquery Как я могу загружать файлы асинхронно?
- jquery Получить поля ввода формы с помощью jQuery?
- jquery Каков наилучший способ добавить параметры для выбора в качестве объекта JS с помощью jQuery?