Allain Lalonde Allain Lalonde - 6 months ago 18
jQuery Question

Does jQuery do any kind of caching of "selectors"?

For example, will the first piece of code perform a full search twice, or is it smart enough to cache results if no DOM changes have occurred?

if ($("#navbar .heading").text() > "") {
$("#navbar .heading").hide();
}


and

var $heading = $("#navbar .heading");

if ($heading.text() > "") {
$heading.hide();
}


If the selector is more complex I can imagine it's a non-trivial hit.

Answer

jQuery doesn't, but there's the possibility of assigning to variables within your expression and then use re-using those in subsequent expressions. So, cache-ifying your example ...

if ((cached = $("#navbar .heading")).text() > "") {
  cached.hide();
}

Downside is it makes the code a bit fuglier and difficult to grok.