Обновление 2018
Поскольку это довольно популярный ответ, я решил немного его обновить и украсить, добавив селектор textnode в jQuery в качестве плагина.
В приведенном ниже фрагменте вы можете видеть, что я определяю новую функцию jQuery, которая получает все (и только) textNodes.Вы также можете связать эту функцию с помощью, например, функции first()
.Я делаю обрезку на текстовом узле и проверяю, не является ли он пустым после обрезки, потому что пробелы, табуляции, новые строки и т. Д. Также распознаются как текстовые узлы.Если вам тоже нужны эти узлы, просто удалите это из оператора if в функции jQuery.
Я добавил пример, как заменить первый текстовый узел и как заменить все текстовые узлы.
ЭтоТакой подход облегчает чтение кода и упрощает его использование несколько раз и для разных целей.
Обновление 2017 года (adrach) все равно должно работать, если вы предпочитаете это.
jQuery.fn.textNodes = function() {
return this.contents().filter(function() {
return (this.nodeType === Node.TEXT_NODE && this.nodeValue.trim() !== "");
});
}
$(document).ready(function(){
$('#replaceAll').on('click', function() {
$('#testSubject').textNodes().replaceWith('Replaced');
});
$('#replaceFirst').on('click', function() {
$('#testSubject').textNodes().first().replaceWith('Replaced First');
});
});
p {
margin: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="testSubject">
**text to change**
<p>text that should not change</p>
<p>text that should not change</p>
**also text to change**
<p>text that should not change</p>
<p>text that should not change</p>
**last text to change**
</div>
<button id="replaceFirst">Replace First</button>
<button id="replaceAll">Replace All</button>
Обновление 2017 года (adrach):
Похоже, некоторые вещи изменились с тех порбыл опубликован.Вот обновленная версия
$("div").contents().filter(function(){ return this.nodeType == 3; }).first().replaceWith("change text");
Оригинальный ответ (не работает для текущих версий)
$("div").contents().filter(function(){ return this.nodeType == 3; })
.filter(':first').text("change text");
Источник: http://api.jquery.com/contents/