Я пытаюсь удалить все дочерние элементы из узла, но оставить фактическое текстовое содержимое узла. т.е. исходить из этого:
<h3>
MY TEXT
<a href='...'>Link</a>
<a href='...'>Link</a>
<select>
<option>Value</option>
<option>Value</option>
</select>
</h3>
к этому:
<h3>
MY TEXT
</h3>
Я знаю, что существует миллион простых способов сделать это в jQuery, но это не вариант для этого проекта... Я должен использовать старый простой javascript.
Этот:
var obj = document.getElementById("myID");
if ( obj.hasChildNodes() ){
while ( obj.childNodes){
obj.removeChild( obj.firstChild );
}
}
очевидно, приводит только к <h3></h3>
, и когда я попытался:
var h3 = content_block.getElementsByTagName('h3')[0];
var h3_children = h3.getElementsByTagName('*');
for(var i=0;i<h3_children.length;i++){
h3_children[i].parentNode.removeChild(h3_children[i]);
}
Он зависает на полпути. Я подумал, что у него возникли проблемы с удалением параметров, но изменение цикла for
для пропуска удаления, если только h3_children[i].parentNode==h3
(т.е. только удаление дочерних элементов первого уровня) не останавливается после удаления первого элемента <a>
.
Я уверен, что упускаю здесь что-то очень очевидное, но, возможно, пришло время обратиться к толпе. Как удалить все дочерние элементы, но оставить только textNodes
первого уровня? И почему описанный выше подход не работает?
ПРАВКИ
Есть несколько рабочих решений, и это здорово, но я все еще немного озадачен тем, почему перебор и удаление h3.getElementsByTagName('*')
не работает. Аналогичный подход(адаптировано из Blender) также не завершает процесс удаления дочерних узлов. Любые мысли о том, почему это будет?
<a>
, кроме одного: jsfiddle.net/rSbmR. - person Blender   schedule 19.10.2012getElementsByTagName loop
(удаление большинства, но не всех элементов). Есть мысли, почему? - person Ben D   schedule 19.10.2012