Если у меня есть
<!-- some comment -->
Как мне получить этот элемент и изменить содержимое с помощью javascript? И если у меня есть код внутри, и я хочу удалить тег комментариев, как я могу это сделать?
Если у меня есть
<!-- some comment -->
Как мне получить этот элемент и изменить содержимое с помощью javascript? И если у меня есть код внутри, и я хочу удалить тег комментариев, как я могу это сделать?
Лучший способ - использовать выделенный 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));
});
Если вам необходимо поддерживать старые браузеры (например, 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 DOM.
Доступ к содержимому комментария так же просто, как commentObject.nodeValue
.
Удаление комментария несколько более подробное: commentObject.parentNode.removeChild(commentObject)
Вам нужно пройти DOM, чтобы получить его.
Элемент nodeType
элемента DOM комментария 8
if( oNode.nodeType === 8 ) {
oNode.parentNode.removeChild( oNode );
}
будет подходом
Вот плагин JQuery, который извлекает комментарии:
Основная идея - посмотреть nodes
, а не elements
:
http://www.w3schools.com/htmldom/dom_nodes.asp
Вы начинаете с объекта document
и повторяете их с помощью коллекции childNodes
. Вы должны проверить node.nodeType == 8
, который будет возвращать только узлы комментария (обратите внимание, что вам нужно рекурсивно перебирать дочерние узлы).