How to get tag in html page, if I know what text tag contains. E.g.:
<a ...>SearchingText</a>
How to get tag in html page, if I know what text tag contains. E.g.:
<a ...>SearchingText</a>
Simply pass your substring into the following line:
Outer HTML
document.documentElement.outerHTML.includes('substring')
Inner HTML
document.documentElement.innerHTML.includes('substring')
You can use these to search through the entire document and retrieve the tags that contain your search term:
function get_elements_by_inner(word) {
res = []
elems = [...document.getElementsByTagName('a')];
elems.forEach((elem) => {
if(elem.outerHTML.includes(word)) {
res.push(elem)
}
})
return(res)
}
Usage:
How many times is the user "T3rm1" mentioned on this page?
get_elements_by_inner("T3rm1").length
1
How many times is jQuery mentioned?
get_elements_by_inner("jQuery").length
3
Get all elements containing the word "Cybernetic":
get_elements_by_inner("Cybernetic")
To get the filter method from user1106925 working in <=IE11 if needed
You can replace the spread operator with:
[].slice.call(document.querySelectorAll("a"))
and the includes call with a.textContent.match("your search term")
which works pretty neatly:
[].slice.call(document.querySelectorAll("a"))
.filter(a => a.textContent.match("your search term"))
.forEach(a => console.log(a.textContent))
You can do this, not sure if this is recommended but it works for me.
[... document.querySelectorAll('a')].filter(el => el.textContent.includes('sometext'));
You can use a TreeWalker to go over the DOM nodes, and locate all text nodes that contain the text, and return their parents:
const findNodeByContent = (text, root = document.body) => {
const treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
const nodeList = [];
while (treeWalker.nextNode()) {
const node = treeWalker.currentNode;
if (node.nodeType === Node.TEXT_NODE && node.textContent.includes(text)) {
nodeList.push(node.parentNode);
}
};
return nodeList;
}
const result = findNodeByContent('SearchingText');
console.log(result);
<a ...>SearchingText</a>
document.querySelectorAll('a').forEach(function (item) {
if (item.innerText == 'SearchingText') {
console.dir(item);
}
});
This does the job.
Returns an array of nodes containing text.
function get_nodes_containing_text(selector, text) {
const elements = [...document.querySelectorAll(selector)];
return elements.filter(
(element) =>
element.childNodes[0]
&& element.childNodes[0].nodeValue
&& RegExp(text, "u").test(element.childNodes[0].nodeValue.trim())
);
}
Use property called getElementInnerText in script which will fetch inner content of that tag.
document.getElementInnerText('a');