* NameИ я хочу изменить заголовок ярлыка на Titlejquery. Так и делаю$('label[for=user_name]').html('Title')И это заменить все внутренние HTML (с abbrт" />
Вопрос:

Как изменить только текстовый узел в элементе

jquery

32398 просмотра

8 ответа

8002 Репутация автора

У меня есть следующий HTML:

<label for="user_name">
  <abbr title="required">*</abbr>
  Name
</label>

И я хочу изменить заголовок ярлыка на Titlejquery. Так и делаю

$('label[for=user_name]').html('Title')

И это заменить все внутренние HTML (с abbrтегом)

Итак, какой самый простой способ заменить только Name?

Автор: MikDiet Источник Размещён: 31.03.2012 01:43

Ответы (8)


1 плюс

7667 Репутация автора

Вы можете выбрать только abbrэлемент, сохранить его, а затем заменить весь контент на сохраненный элемент плюс измененный заголовок:

​$('label[for="user_name"]').each(function(){
   var a = $(this).children('abbr');
   $(this).html(a).append('Title');
});

Смотрите эту скрипку

Автор: m90 Размещён: 31.03.2012 01:51

3 плюса

14782 Репутация автора

Это может быть не самый красивый способ, но это работает:

var $label = $('label[for=user_name]');
$label.html($label.html().replace("Name", "Title"));
Автор: Code Maverick Размещён: 31.03.2012 01:53

1 плюс

3333 Репутация автора

Вы можете использовать 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:01

74 плюса

148914 Репутация автора

Решение

Если вы используете contents()метод, он также вернет текстовые узлы. Поскольку у jQuery нет методов текстового узла, преобразуйте последний узел в узел DOM

$('label[for="user_name"]').contents().last()[0].textContent='Title';

Демо: http://jsfiddle.net/yPAST/1/

Автор: charlietfl Размещён: 31.03.2012 02:15

1 плюс

1433 Репутация автора

Решение 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');

Автор: Erik255 Размещён: 13.01.2013 01:01

44 плюса

23817 Репутация автора

Извините за поздний ответ ... Но вот способ сделать это, используя только jQuery:

$('label').contents().last().replaceWith('Title');
Автор: Dom Размещён: 14.03.2013 05:23

1 плюс

19 Репутация автора

Это решение, которое работает для большинства браузеров

$('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 плюса

2007 Репутация автора

если вы манипулируете более чем 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
Вопросы из категории :
32x32