[javascript] How to get element by innerText

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.

_x000D_
_x000D_
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_
_x000D_
_x000D_