Я хочу динамически обновить текст элемента:
<div>
**text to change**
<someChild>
text that should not change
</someChild>
<someChild>
text that should not change
</someChild>
</div>
Я новичок в jQuery, поэтому эта задача кажется мне довольно сложной. Может ли кто-нибудь указать мне функцию / селектор для использования?
Если возможно, я бы хотел сделать это, не добавляя новый контейнер для текста, который мне нужно изменить.
javascript
jquery
ика
источник
источник
Ответы:
У Марка есть лучшее решение с использованием jQuery , но, возможно, вы также сможете сделать это и с помощью обычного JavaScript.
В Javascript
childNodes
свойство предоставляет вам все дочерние узлы элемента, включая текстовые узлы.Итак, если вы знали, что текст, который вы хотите изменить, всегда будет первым в элементе, то, например, для этого HTML:
Вы могли сделать это:
Конечно, вы все равно можете использовать jQuery для выбора
<div>
в первую очередь (т.е.var your_div = $('your_div').get(0);
).источник
data
илиnodeValue
свойство.$('#yourDivId')[0].childNodes[0].nodeValue = 'New Text';
Обновление 2018
Поскольку это довольно популярный ответ, я решил немного обновить и украсить его, добавив селектор текстового узла в jQuery в качестве плагина.
Во фрагменте ниже вы можете видеть, что я определяю новую функцию jQuery, которая получает все (и только) textNodes. Вы можете связать эту функцию, например, с
first()
функцией. Я обрезаю текстовый узел и проверяю, не пуст ли он после обрезки, потому что пробелы, табуляции, новые строки и т. Д. Также распознаются как текстовые узлы. Если вам тоже нужны эти узлы, просто удалите их из оператора if в функции jQuery.Я добавил пример, как заменить первый текстовый узел и как заменить все текстовые узлы.
Такой подход упрощает чтение кода и упрощает его многократное использование с разными целями.
Update 2017 (adrach) должно работать, а если вы предпочитаете.
Как расширение jQuery
Показать фрагмент кода
Эквивалент Javascript (ES)
Показать фрагмент кода
Обновление 2017 (адрах):
Похоже, с тех пор, как это было опубликовано, несколько вещей изменились. Вот обновленная версия
Исходный ответ (не работает для текущих версий)
Источник: http://api.jquery.com/contents/
источник
.filter(':first')
, но использование.first()
вместо этого помогло мне. Спасибо!.text()
(см. Этот jsfiddle ), но работает с.replaceWith()
( jsfiddle здесь ).nodeType=3
, означает фильтр только типа узла "TEXT", w3schools.com/jsref/prop_node_nodetype.asp для получения дополнительной информацииПосмотреть в действии
Разметка:
источник
Это изменяет только первый текстовый узел
источник
Просто оберните текст, который вы хотите изменить, в диапазон с классом для выбора.
Не обязательно отвечать на ваш вопрос, я знаю, но, вероятно, лучшая практика кодирования. Держите вещи чистыми и простыми
Вуаля!
источник
Для указанного вами конкретного случая:
... это очень просто:
Вы не указываете, как вы хотите это обобщить. Если, скажем, вы хотите изменить текст первого текстового узла внутри
<div>
, вы можете сделать что-то вроде этого:источник
источник
Вот еще один метод: http://jsfiddle.net/qYUBp/7/
HTML
Jquery
источник
Здесь много отличных ответов, но они обрабатывают только один текстовый узел с дочерними элементами. В моем случае мне нужно было работать со всеми текстовыми узлами и игнорировать дочерние элементы html, НО СОХРАНИТЬ ЗАКАЗ.
Итак, если у нас есть такой случай:
Мы можем использовать следующий код только для изменения текста И СОХРАНЕНИЯ ЗАКАЗА
Вот jsfiddle его работы
источник
Я думаю, вы ищете .prependTo ().
http://api.jquery.com/prependTo/
источник
Простой ответ:
источник
Проблема с ответом Марка в том, что вы также получаете пустые текстовые узлы. Решение как плагин jQuery:
источник
Это старый вопрос, но вы можете сделать такую простую функцию, чтобы облегчить себе жизнь:
Пример:
Использование:
источник
Версия 2019 - Short & Simple
объяснение
document.querySelector('#your-div-id')
используется для выбора родителя (элемента, текст которого вы собираетесь изменить).childNodes[0]
выбирает текстовый узел.nodeValue = 'new text'
устанавливает значение текстового узла на «новый текст»Этот ответ, возможно, вдохновлен комментарием Дина Мартина. Не могу сказать наверняка, так как использую это решение уже много лет. Просто подумал, что мне стоит опубликовать эту вероятность здесь, потому что некоторых людей это волнует больше, чем то, что это лучшее решение.
источник