Подтвердить что ты не робот

Как получить комментарий HTML с помощью javascript

Если у меня есть

  <!-- some comment -->

Как мне получить этот элемент и изменить содержимое с помощью javascript? И если у меня есть код внутри, и я хочу удалить тег комментариев, как я могу это сделать?

4b9b3361

Ответ 1

Использование NodeIterator (IE >= 9)

Лучший способ - использовать выделенный NodeIterator экземпляр, повторяющий все комментарии, содержащиеся в данном корневом элементе.

Посмотрите на действие!

function filterNone() {
    return NodeFilter.FILTER_ACCEPT;
}

function getAllComments(rootElem) {
    var comments = [];
    // Fourth argument, which is actually obsolete according to the DOM4 standard, is required in IE 11
    var iterator = document.createNodeIterator(rootElem, NodeFilter.SHOW_COMMENT, filterNone, false);
    var curNode;
    while (curNode = iterator.nextNode()) {
        comments.push(curNode.nodeValue);
    }
    return comments;
}

window.addEventListener("load", function() {
    console.log(getAllComments(document.body));
});

Использование пользовательского обхода DOM (для поддержки IE < 9)

Если вам необходимо поддерживать старые браузеры (например, IE < 9), вам необходимо пройти через DOM самостоятельно и извлечь те элементы, тип node Node.COMMENT_NODE.

Посмотрите на действие!

// Thanks to Yoshi for the hint!
// Polyfill for IE < 9
if (!Node) {
    var Node = {};
}
if (!Node.COMMENT_NODE) {
    // numeric value according to the DOM spec
    Node.COMMENT_NODE = 8;
}

function getComments(elem) {
  var children = elem.childNodes;
  var comments = [];

  for (var i=0, len=children.length; i<len; i++) {
    if (children[i].nodeType == Node.COMMENT_NODE) {
      comments.push(children[i]);
    }
  }
  return comments;
}

Извлечение содержимого node и удаление его

Независимо от того, как вы выбираете выше, вы получаете те же объекты node DOM.

Доступ к содержимому комментария так же просто, как commentObject.nodeValue.
Удаление комментария несколько более подробное: commentObject.parentNode.removeChild(commentObject)

Ответ 2

Вам нужно пройти DOM, чтобы получить его. Элемент nodeType элемента DOM комментария 8

if( oNode.nodeType === 8 ) {
  oNode.parentNode.removeChild( oNode );
}

будет подходом

Ответ 3

Вот плагин JQuery, который извлекает комментарии:

http://www.bennadel.com/blog/1563-jQuery-Comments-Plug-in-To-Access-HTML-Comments-For-DOM-Templating.htm

Основная идея - посмотреть nodes, а не elements:

http://www.w3schools.com/htmldom/dom_nodes.asp

Вы начинаете с объекта document и повторяете их с помощью коллекции childNodes. Вы должны проверить node.nodeType == 8, который будет возвращать только узлы комментария (обратите внимание, что вам нужно рекурсивно перебирать дочерние узлы).