2014-12-12 1 views
1

Так у меня есть следующие настройки:Удалить текст в DIV только, но не в дочерних элементах - НЕ Jquery

<div class='topDiv'> 
     SomeText 
     <span>ChildText</span> 
     OtherText 
     <span>ChildText</span> 
     DifferentText 
    </div> 

Как удалить текст «SOMETEXT», «othertext» и «DifferentText» в JavaScript (а не JQuery), не удаляя дочерний текст. Установка innerHTML = ""; удаляет содержимое, используя JQuery .text() или JavaScript .textContent = ""; тоже не работает.

Я посмотрел на первый ответ ниже, но это будет возвращать только первый SOMETEXT (то, что я действительно искал что-то, что бы удалить или выделить весь текст topDiv синь, не влияя на пролеты.

текст не может быть скрыто либо, он должен быть удален

Спасибо за любую помощь!

+5

Это не должно быть закрыты как дубликат, что Amit Joki. В вопросе говорится «(не JQuery)», а jQuery не помечен. –

+1

Попробуйте указать все 'childNodes' и удалите те, которые являются текстовыми узлами –

ответ

1

Попробуйте это ...

elementToRemove = document.getElementById("topDiv").firstChild; 
document.getElementById("topDiv").removeChild(elementToRemove); 
+0

Кажется, что работает до сих пор, +1 для быстрого ответа – Truvia

2

Вы со пакетирования хранить DOM элементы, извлекаемые с .children, снимите .innerHTML в DIV, и повторное добавление дочерних элементов:

var div = document.querySelector(".topDiv"); 
 
var children = []; 
 
for(var i=0; i<div.children.length; i++) { 
 
    children.push(div.children[i]); 
 
} 
 

 
div.innerHTML = ""; 
 
children.forEach(function(item) { 
 
    div.appendChild(item); 
 
});
<div class='topDiv'> 
 
    SomeText 
 
    <span>ChildText</span> 
 
    <span>ChildText</span> 
 
</div>

+0

Хорошее решение! Знаете ли вы, почему нажатие детей в массив работает и просто с помощью 'var children = document.body.children' нет? –

+0

@ spencer.sm 'var children = document.body.children' дает вам div, а не дочерние элементы div – user3207158

Смежные вопросы