function findByTextContent(needle, haystack, precise) {_x000D_
// needle: String, the string to be found within the elements._x000D_
// haystack: String, a selector to be passed to document.querySelectorAll(),_x000D_
// NodeList, Array - to be iterated over within the function:_x000D_
// precise: Boolean, true - searches for that precise string, surrounded by_x000D_
// word-breaks,_x000D_
// false - searches for the string occurring anywhere_x000D_
var elems;_x000D_
_x000D_
// no haystack we quit here, to avoid having to search_x000D_
// the entire document:_x000D_
if (!haystack) {_x000D_
return false;_x000D_
}_x000D_
// if haystack is a string, we pass it to document.querySelectorAll(),_x000D_
// and turn the results into an Array:_x000D_
else if ('string' == typeof haystack) {_x000D_
elems = [].slice.call(document.querySelectorAll(haystack), 0);_x000D_
}_x000D_
// if haystack has a length property, we convert it to an Array_x000D_
// (if it's already an array, this is pointless, but not harmful):_x000D_
else if (haystack.length) {_x000D_
elems = [].slice.call(haystack, 0);_x000D_
}_x000D_
_x000D_
// work out whether we're looking at innerText (IE), or textContent _x000D_
// (in most other browsers)_x000D_
var textProp = 'textContent' in document ? 'textContent' : 'innerText',_x000D_
// creating a regex depending on whether we want a precise match, or not:_x000D_
reg = precise === true ? new RegExp('\\b' + needle + '\\b') : new RegExp(needle),_x000D_
// iterating over the elems array:_x000D_
found = elems.filter(function(el) {_x000D_
// returning the elements in which the text is, or includes,_x000D_
// the needle to be found:_x000D_
return reg.test(el[textProp]);_x000D_
});_x000D_
return found.length ? found : false;;_x000D_
}_x000D_
_x000D_
_x000D_
findByTextContent('link', document.querySelectorAll('li'), false).forEach(function(elem) {_x000D_
elem.style.fontSize = '2em';_x000D_
});_x000D_
_x000D_
findByTextContent('link3', 'a').forEach(function(elem) {_x000D_
elem.style.color = '#f90';_x000D_
});
_x000D_
<ul>_x000D_
<li><a href="#">link1</a>_x000D_
</li>_x000D_
<li><a href="#">link2</a>_x000D_
</li>_x000D_
<li><a href="#">link3</a>_x000D_
</li>_x000D_
<li><a href="#">link4</a>_x000D_
</li>_x000D_
<li><a href="#">link5</a>_x000D_
</li>_x000D_
</ul>
_x000D_
Of course, a somewhat simpler way still is:
var textProp = 'textContent' in document ? 'textContent' : 'innerText';_x000D_
_x000D_
// directly converting the found 'a' elements into an Array,_x000D_
// then iterating over that array with Array.prototype.forEach():_x000D_
[].slice.call(document.querySelectorAll('a'), 0).forEach(function(aEl) {_x000D_
// if the text of the aEl Node contains the text 'link1':_x000D_
if (aEl[textProp].indexOf('link1') > -1) {_x000D_
// we update its style:_x000D_
aEl.style.fontSize = '2em';_x000D_
aEl.style.color = '#f90';_x000D_
}_x000D_
});
_x000D_
<ul>_x000D_
<li><a href="#">link1</a>_x000D_
</li>_x000D_
<li><a href="#">link2</a>_x000D_
</li>_x000D_
<li><a href="#">link3</a>_x000D_
</li>_x000D_
<li><a href="#">link4</a>_x000D_
</li>_x000D_
<li><a href="#">link5</a>_x000D_
</li>_x000D_
</ul>
_x000D_
References: