I've just needed a way to get the element that contains a specific text and this is what I came up with.
Use document.getElementsByInnerText()
to get multiple elements (multiple elements might have the same exact text), and use document.getElementByInnerText()
to get just one element (first match).
Also, you can localize the search by using an element (e.g. someElement.getElementByInnerText()
) instead of document
.
You might need to tweak it in order to make it cross-browser or satisfy your needs.
I think the code is self-explanatory, so I'll leave it as it is.
HTMLElement.prototype.getElementsByInnerText = function (text, escape) {_x000D_
var nodes = this.querySelectorAll("*");_x000D_
var matches = [];_x000D_
for (var i = 0; i < nodes.length; i++) {_x000D_
if (nodes[i].innerText == text) {_x000D_
matches.push(nodes[i]);_x000D_
}_x000D_
}_x000D_
if (escape) {_x000D_
return matches;_x000D_
}_x000D_
var result = [];_x000D_
for (var i = 0; i < matches.length; i++) {_x000D_
var filter = matches[i].getElementsByInnerText(text, true);_x000D_
if (filter.length == 0) {_x000D_
result.push(matches[i]);_x000D_
}_x000D_
}_x000D_
return result;_x000D_
};_x000D_
document.getElementsByInnerText = HTMLElement.prototype.getElementsByInnerText;_x000D_
_x000D_
HTMLElement.prototype.getElementByInnerText = function (text) {_x000D_
var result = this.getElementsByInnerText(text);_x000D_
if (result.length == 0) return null;_x000D_
return result[0];_x000D_
}_x000D_
document.getElementByInnerText = HTMLElement.prototype.getElementByInnerText;_x000D_
_x000D_
console.log(document.getElementsByInnerText("Text1"));_x000D_
console.log(document.getElementsByInnerText("Text2"));_x000D_
console.log(document.getElementsByInnerText("Text4"));_x000D_
console.log(document.getElementsByInnerText("Text6"));_x000D_
_x000D_
console.log(document.getElementByInnerText("Text1"));_x000D_
console.log(document.getElementByInnerText("Text2"));_x000D_
console.log(document.getElementByInnerText("Text4"));_x000D_
console.log(document.getElementByInnerText("Text6"));
_x000D_
<table>_x000D_
<tr>_x000D_
<td>Text1</td>_x000D_
</tr>_x000D_
<tr>_x000D_
<td>Text2</td>_x000D_
</tr>_x000D_
<tr>_x000D_
<td>_x000D_
<a href="#">Text2</a>_x000D_
</td>_x000D_
</tr>_x000D_
<tr>_x000D_
<td>_x000D_
<a href="#"><span>Text3</span></a>_x000D_
</td>_x000D_
</tr>_x000D_
<tr>_x000D_
<td>_x000D_
<a href="#">Special <span>Text4</span></a>_x000D_
</td>_x000D_
</tr>_x000D_
<tr>_x000D_
<td>_x000D_
Text5_x000D_
<a href="#">Text6</a>_x000D_
Text7_x000D_
</td>_x000D_
</tr>_x000D_
</table>
_x000D_