Как удалить текст (без удаления внутренних элементов) из родительского элемента с помощью jquery - программирование
Подтвердить что ты не робот

Как удалить текст (без удаления внутренних элементов) из родительского элемента с помощью jquery

Представьте, что у меня есть что-то вроде следующего (изменено с http://viralpatel.net/blogs/jquery-get-text-element-without-child-element/)

<div id="foo">
    first
    <div id="bar1">
        jumps over a lazy dog!
    </div>
    second
    <div id="bar2">
        another jumps over a lazy dog!
    </div>
    third
</div>

Как я могу удалить только (только текст) "первый", "второй" и "третий" из DOM, не затрагивая ни одного из дочерних элементов.

4b9b3361

Ответ 1

Если вы хотите удалить все дочерние текстовые узлы, вы можете использовать .contents(), а затем .filter(), чтобы уменьшить соответствие набора только текстовым узлам:

$("#foo").contents().filter(function () {
     return this.nodeType === 3; 
}).remove();​​​​​​​

Здесь рабочий пример.

Примечание. Это сохранит любые существующие обработчики событий в дочерних элементах, ответы на которые с помощью .html() не будут выполняться (поскольку элементы удаляются из DOM и добавляются обратно).

Примечание 2. Ответы по некоторым связанным вопросам показывают в моем ответе аналогичный код, но они используют константы nodeType (например, return this.nodeType === Node.TEXT_NODE). Это плохая практика, поскольку IE ниже версии 9 не реализует свойство Node. Безопаснее использовать целые числа (которые можно найти в спецификации уровня 2 DOM).

Ответ 2

Здесь версия, отличная от jQuery, которая работает во всех основных браузерах в IE 5, просто для того, чтобы продемонстрировать, насколько небезопасна жизнь без jQuery.

Демо: http://jsfiddle.net/timdown/aHW9J/

код:

var el = document.getElementById("foo"), child = el.firstChild, nextChild;

while (child) {
    nextChild = child.nextSibling;
    if (child.nodeType == 3) {
        el.removeChild(child);
    }
    child = nextChild;
}

Ответ 3

попробуйте следующее:

$("#foo").html($("#foo").find("div"));​

demo: http://jsfiddle.net/PXxC4/

Ответ 4

Вы можете использовать это.

$("#foo").html($("#foo").children());​