Замініть лише текст усередині div, використовуючи jquery


104

У мене є дів, як:

<div id="one">
       <div class="first"></div>
       "Hi I am text"
       <div class="second"></div>
       <div class="third"></div>
</div>

Я намагаюся змінити лише текст з "Привіт, я текст" на "Привіт, я заміню", використовуючи jquery. Це може бути простим, але я не в змозі це зробити.

За допомогою $('#one').text('')просто випорожнюється весь #Oneдів.


Це може бути корисно , щоб зробити скрипку
— Inkbug

Використовуйте текст $ ('# one'). Find ('. First'). Text ('Привіт, я заміню'); замість $ ('# one'). text (); або ви можете безпосередньо отримати доступ до елемента та замінити текст, використовуючи $ ('. first'). text ('Привіт, я заміню');
— Картік Чаухан

Відповіді:


134

Текст не повинен бути самостійним. Покладіть його в spanелемент.

Змініть це на це:

<div id="one">
       <div class="first"></div>
       <span>"Hi I am text"</span>
       <div class="second"></div>
       <div class="third"></div>
</div>
$('#one span').text('Hi I am replace');

51
Це не відповідає на питання ОП, хто не сказав, що має контроль над HTML.
— тар

1
це спрацьовано, але як це можна виконати чи ні? Чи можу я запустити виняток, якщо порожній чи тег змінено? в невдалих прив’язках, тому що цей дів створений code.frit з REST або бази даних
— sabre tabatabaee yazdi

122

Знайдіть текстові вузли ( nodeType==3) та замініть textContent:

$('#one').contents().filter(function() {
    return this.nodeType == 3
}).each(function(){
    this.textContent = this.textContent.replace('Hi I am text','Hi I am replace');
});

Приклад в реальному часі : http://jsfiddle.net/VgFwS/


6
Дійсно чудова відповідь!
— wcolbert

6
Це має бути прийнятою відповіддю, оскільки це не вимагає від вас змінити html!
— Wouter Rutgers

2
@Jamiec FWIW Я люблю цю відповідь , тому що вона дозволяє заміни , не турбуючись про borking розмітки / скриптів і т.д.
— sehe

3
Це прекрасно працювало для мене. Іноді ми працюємо в ситуаціях, які не дозволяють змінювати HTML (тобто SharePoint). Спасибі
— Марк П.

14

Потрібно встановити текст на щось інше, ніж порожній рядок. Крім того, функція .html () повинна виконувати це, зберігаючи структуру HTML розділу.

$('#one').html($('#one').html().replace('text','replace'));

Хоча це спрацювало б у цьому випадку, мені цей варіант не подобається, тому що якби ви замінили слово "перше" на слово "друге" або просто "я" на ", це зіпсує ваші теги
— JSON

10

Якщо ви дійсно знаєте текст, який ви збираєтеся замінити, ви можете використовувати

$('#one').contents(':contains("Hi I am text")')[0].nodeValue = '"Hi I am replace"';

http://jsfiddle.net/5rWwh/

Або

$('#one').contents(':not(*)')[1].nodeValue = '"Hi I am replace"';

$('#one').contents(':not(*)') вибирає неелементні дочірні вузли в цьому випадку текстові вузли, а другий вузол - той, який ми хочемо замінити.

http://jsfiddle.net/5rWwh/1/


2
З jQuery 1.8.3 $('#one').contents(':not(*)')вибере нічого.
— BruceHill

0

Ще один підхід - зберегти цей елемент, змінити текст, а потім додати цей елемент назад

const star_icon = $(li).find('.stars svg')
$(li).find('.stars').text(repo.stargazers_count).append(star_icon)

0

Про всяк випадок, якщо ви не можете змінити HTML. Дуже примітивно, але коротко & працює. (Він буде порожнім батьківським дівом, отже, дочірні діви будуть видалені)

$('#one').text('Hi I am replace');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="one">
  <div class="first"></div>
  "Hi I am text"
  <div class="second"></div>
  <div class="third"></div>
</div>


1
Це видаляє всі дитячі вороги #one
— Scot Nery,

1
@ScotNery дякую, я оновив відповідь. (Хоча це технічно відповідає на це конкретне питання) Я припускаю, що крім загортання тексту тегом, який має ідентифікатор, це було б досить складно. Єдине інше - це відповідати рядок для заміни, але він справді крихкий.
— ReturnTable
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.