2015-08-12 2 views
2

Как я могу получить массив или массив (объект JQuery), содержащий все элементы комментариев в DOM? JQuerycontents() только получить 1 уровень элементов.Получить узлы комментариев в глубоком уровне DOM

Более общая проблема: мне нужно удалить все элементы между двумя текстовыми комментариями в моей DOM. Комментарии также могут быть в дочерних элементах.

...html code... 
<!--remove from here--> 
...code... 
<!--finish removing--> 
...html code... 

Таким образом, после метода, HTML DOM должен выглядеть следующим образом:

...html code... 
...html code... 

Спасибо.

ответ

4

Вы можете использовать TreeWalker с whatToShow, установленным на NodeFilter.SHOW_ALL, чтобы увидеть все узлы вашего документа.

var treeWalker = document.createTreeWalker(
 
    document.body, 
 
    NodeFilter.SHOW_ALL, 
 
    null, 
 
    false 
 
); 
 

 
var commentList = []; 
 

 
while (treeWalker.nextNode()){ 
 
    // keep only comments 
 
    if (treeWalker.currentNode.nodeType === 8) 
 
    commentList.push(treeWalker.currentNode); 
 
} 
 

 
var node; 
 
while (node !== commentList[1]) { 
 
    node = commentList[0].nextSibling; 
 
    node.parentElement.removeChild(node); 
 
}
<!--Folowing element will be deleted--> 
 
<span> Hello world</span> 
 
<!-- the next one should be kept --> 
 
<span> keep me !</span>

+1

делеция часть будет работать только с данной структурой: удалить все между двумя комментариями, если есть только два из них. Вам может потребоваться проверить, хороши ли они или нет. – Kaiido

+0

Я признаю, что еще не слышал об этом :) Я вижу, что это очень хороший кросс-браузер, поэтому это хорошо. Является ли это более эффективным, чем удаление текста из innerHtml с помощью RegEx? Большое спасибо! – mrgoos

+0

Это намного эффективнее! см. [этот фрагмент истории] (http://stackoverflow.com/a/1732454/3702797). Кроме того, TreeWalker действительно мощный, определенно дайте ему попробовать. – Kaiido

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