*** EDIT - проблема, похоже, в том, что я пытаюсь добавить класс (я попытался изменить некоторый CSS для тестируемого класса, т сделать что-нибудь)Добавить класс в элемент в DOM на основе содержимого
Я хочу, чтобы найти элемент в DOM на основе текста, а также добавить класс к нему, так что я могу манипулировать его/ее родительские элементы
Это функция, которую я написал, чтобы сделать это (до этого я использую function из stackoverflow, чтобы пройти через DOM, и вызывать мою функцию для замены совпадений - (фактические значения строк не важны прямо сейчас) - HTML, который я изменяю, является DOM.
var MATCH = ['word'];
var REPLACE = ['other'];
function replaceText(textNode) {
var badWord = textNode.nodeValue;
var replaceWord = "";
badWord.className = "filter";
//Go through and match/replace strings equal to MATCH
for (var i=0; i< MATCH.length; i++) {
replaceWord = document.getElementsByClassName("filter").innerHTML;
replaceWord = replaceWord.replace(new RegExp('\\b' + MATCH[i] + '\\b', 'g'), REPLACE[i]);
}
textNode.nodeValue = replaceWord;
}
Он работает, когда я только непосредственно заменить текст в слове, как это ниже, - но я хочу, чтобы получить доступ и изменить из класса, так что я могу изменить родительские элементы/CSS
//working version without adding class
function hide(textNode) {
var badWord = textNode.nodeValue;
//Go through and match/replace strings equal to MATCH
for (var i=0; i< MATCH.length; i++) {
badWord = badWord.replace(new RegExp('\\b' + MATCH[i] + '\\b', 'g'), REPLACE[i]);
}
textNode.nodeValue = badWord;
}
функции от StackOverflow поста -
walk(document.body);
function walk(node) {
var child, next;
switch (node.nodeType) {
case ELEMENT: // Element
case DOCUMENT: // Document
case DOCUMENT_FRAGMENT: // Document fragment
child = node.firstChild;
while (child) {
next = child.nextSibling;
walk(child);
child = next;
}
break;
case TEXT: // Text node
replaceText(node);
break;
}
}
Вы используете addClass на узлеValue, который не будет работать, попробуйте 'textNode.className = 'filter';'. Если фильтр фильтров нескольких классов, вы можете использовать 'document.getElementsByClassName ('filter')', чтобы получить их все. Чтобы получить полный ответ, пожалуйста, обновите свой пост с помощью HTML, который вы пытаетесь изменить, для замены слов и ссылки на сообщение stackoverflow с помощью функции разбора DOM. – M4tini
@ M4tini добавил ссылку - я изменяю текущую страницу - это для расширения хрома – user146303