Hat jQuery cache-Elemente, die intern?

Weiß ich jQuery nicht cache-Kollektionen von element -, f -.ex ruft:

$('.myclass').html('hello');
$('.myclass').html('bye');

Wird jQuery besteigen den DOM zweimal.

Aber, wie etwa Cache-DOM-Knoten?

var elems = document.querySelectorAll('.myclass');

$(elems).html('hello');
$(elems).html('bye');

Wird jQuery cache diese intern, oder werden Sie genauso langsam wie beim ersten Beispiel?

Zu klären: wird jQuery halten eine Referenz auf elems - und cache - $(elems) intern, so dass Sie nicht haben, um die gleichen $() wrapper jedes mal?

Etwas wie:

cache = {}
constructor = function(collection)
    if collection in cache
        return cache[collection]
    else construct(collection)
  • document.querySelectorAll('.myclass'); gibt ein sofort ausgewertet Sammlung. Es ist das, was verhindert, dass "die Besteigung des DOM zweimal", nichts zu tun mit jQuery. $(..) übernehmen gerne eine Sammlung von DOM-Knoten (im ersten Beispiel brauchte es einen Selektor).
  • Ja, ich weiß, es kann dauern, eine Sammlung, aber wird es einen cache der wrapper für den gleichen Sammlung?
  • Nein, es wird nicht. Das ist, was ich und pst haben beide gesagt, unsere Antworten. jQuery wird nicht alles tun, mit dem aufeinander abgestimmten Satz über die Aussage zu, dass die aufeinander abgestimmten Satz gilt. Es ist bis zu Ihnen, um einen Verweis auf ein jQuery-Objekt, wenn du gehst zu verwenden es mehrmals.
Schreibe einen Kommentar