Замініть лише текст усередині 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.