Select element by exact match of its content

No, there’s no jQuery (or CSS) selector that does that.

You can readily use filter:

$("p").filter(function() {
    return $(this).text() === "hello";
}).css("font-weight", "bold");

It’s not a selector, but it does the job. 🙂

If you want to handle whitespace before or after the “hello”, you might throw a $.trim in there:

return $.trim($(this).text()) === "hello";

For the premature optimizers out there, if you don’t care that it doesn’t match <p><span>hello</span></p> and similar, you can avoid the calls to $ and text by using innerHTML directly:

return this.innerHTML === "hello";

…but you’d have to have a lot of paragraphs for it to matter, so many that you’d probably have other issues first. 🙂

Leave a Comment