Chciałbym dynamicznie aktualizować tekst elementu:
<div>
**text to change**
<someChild>
text that should not change
</someChild>
<someChild>
text that should not change
</someChild>
</div>
Jestem nowy w jQuery, więc to zadanie wydaje mi się dość trudne. Czy ktoś mógłby wskazać mi funkcję / selektor do użycia?
Jeśli to możliwe, chciałbym to zrobić bez dodawania nowego kontenera na tekst, który muszę zmienić.
javascript
jquery
ika
źródło
źródło
Odpowiedzi:
Mark ma lepsze rozwiązanie przy użyciu jQuery , ale możesz to zrobić również w zwykłym JavaScript.
W Javascript ta
childNodes
właściwość udostępnia wszystkie węzły potomne elementu, w tym węzły tekstowe.Tak więc, jeśli wiesz, że tekst, który chcesz zmienić, zawsze będzie pierwszą rzeczą w elemencie, to masz np. Ten HTML:
Możesz to zrobić:
Oczywiście nadal możesz użyć jQuery, aby wybrać
<div>
na pierwszym miejscu (tjvar your_div = $('your_div').get(0);
.).źródło
data
lubnodeValue
nieruchomość.$('#yourDivId')[0].childNodes[0].nodeValue = 'New Text';
Zaktualizuj 2018
Ponieważ jest to dość popularna odpowiedź, postanowiłem ją zaktualizować i trochę upiększyć, dodając selektor textnode do jQuery jako wtyczkę.
W poniższym fragmencie widać, że definiuję nową funkcję jQuery, która pobiera wszystkie (i tylko) textNodes. Możesz również połączyć tę funkcję za pomocą na przykład
first()
funkcji. Przycinam węzeł tekstowy i sprawdzam, czy po przycięciu nie jest pusty, ponieważ spacje, tabulatory, nowe wiersze itp. Są również rozpoznawane jako węzły tekstowe. Jeśli potrzebujesz również tych węzłów, po prostu usuń to z instrukcji if w funkcji jQuery.Dodałem przykład, jak zamienić pierwszy węzeł tekstowy i jak zamienić wszystkie węzły tekstowe.
Takie podejście ułatwia czytanie kodu i łatwiejsze korzystanie z niego wiele razy i do różnych celów.
Aktualizacja 2017 (adrach) powinna nadal działać jak dobrze, jeśli wolisz.
Jako rozszerzenie jQuery
Pokaż fragment kodu
Eqivilant Javascript (ES)
Pokaż fragment kodu
Aktualizacja 2017 (adrach):
Wygląda na to, że od czasu opublikowania tego artykułu zmieniło się kilka rzeczy. Oto zaktualizowana wersja
Oryginalna odpowiedź (nie działa w aktualnych wersjach)
Źródło: http://api.jquery.com/contents/
źródło
.filter(':first')
, ale używanie.first()
zamiast tego działało dla mnie. Dzięki!.text()
(zobacz to jsfiddle ), ale działa z.replaceWith()
( jsfiddle tutaj ).nodeType=3
to znaczy filtrować tylko typ węzła „TEXT”, w3schools.com/jsref/prop_node_nodetype.asp po więcej informacjiZobacz w akcji
Narzut :
źródło
To zmienia tylko pierwszy węzeł tekstowy
źródło
Po prostu zawiń tekst, który chcesz zmienić, w zakres klasą do wybrania.
Niekoniecznie odpowiada na twoje pytanie, które znam, ale prawdopodobnie lepsza praktyka kodowania. Utrzymuj porządek i prostotę
Voilà!
źródło
W konkretnym przypadku, o którym wspomniałeś:
... to jest bardzo proste:
Nie mówisz, jak chcesz to uogólniać. Jeśli, powiedzmy, chcesz zmienić tekst pierwszego węzła tekstowego w obrębie
<div>
, możesz zrobić coś takiego:źródło
źródło
Tutaj jest jeszcze inna metoda: http://jsfiddle.net/qYUBp/7/
HTML
JQUERY
źródło
Wiele świetnych odpowiedzi tutaj, ale obsługują one tylko jeden węzeł tekstowy z dziećmi. W moim przypadku musiałem operować na wszystkich węzłach tekstowych i ignorować dzieci HTML, ALE ZACHOWAĆ ZAMÓWIENIE.
Więc jeśli mamy taki przypadek:
Możemy użyć poniższego kodu tylko do modyfikacji tekstu I ZACHOWANIA ZAMÓWIENIA
Oto jsfiddle z nim pracować
źródło
Myślę, że szukasz .prependTo ().
http://api.jquery.com/prependTo/
źródło
Prosta odpowiedź:
źródło
Problem z odpowiedzią Marka polega na tym, że otrzymujesz również puste textnodes. Rozwiązanie jako wtyczka jQuery:
źródło
To stare pytanie, ale możesz zrobić prostą funkcję, taką jak ta, aby ułatwić sobie życie:
Przykład:
Stosowanie:
źródło
Wersja 2019 - Krótka i prosta
Wyjaśnienie
document.querySelector('#your-div-id')
służy do wyboru rodzica (elementu, którego tekst zamierzasz zmienić).childNodes[0]
wybiera węzeł tekstowy.nodeValue = 'new text'
ustawia wartość węzła tekstowego na „nowy tekst”Ta odpowiedź jest prawdopodobnie inspirowana komentarzem Deana Martina. Nie mogę tego powiedzieć na pewno, ponieważ korzystam z tego rozwiązania od lat. Pomyślałem, że powinienem tutaj zamieścić to prawdopodobieństwo, ponieważ niektórym ludziom zależy na tym bardziej niż na tym, że jest to najlepsze rozwiązanie.
źródło