Selector context VS. .find()

Nu de puține ori am văzut cod scris așa:

var parinte = $('#parinte'), 
    alt_parinte = $('#alt-parinte');
parinte.find('.copil');
alt_parinte.find('.alt-copil');

Chiar dacă nu este nimic greșit în acest cod, .find() s-ar putea scrie ceva mai pe scurt, folosind o chestie ce se numește selector context

var parinte = $('#parinte'), 
    alt_parinte = $('#alt-parinte');
$('.copil', parinte)
$('.alt-copil', alt_parinte);

Intern, jQuery folosește cea de-a doua metodă ca scurtătură pentru prima. Teoretic, .find() ar fi mai rapid. Practic, din testele făcute de mine în Firefox și Chrome, diferențele de performanță sunt atât de mici încât sunt neglijabile.

Pe de altă parte, la fiecare select contextual salvezi câte șase caractere. Poate nu pare mult, dar la o aplicație ceva mai complexă poți avea lejer câteva zeci (poate chiar sute) de apelări .find().

4 Comentarii to “Selector context VS. .find()”

  1. prima varianta e mai usor de citit.

  2. $(‘#parinte .copil’), salvezi mai multe caractere si e mai rapid decat ambele.

    In rest, prima varianta este util cand ai referinta initiala catre parinte. Nu am mai folosit context de ani de zile. Asa cum a zis si semeketh, find() e mai usor de citit si mai rapid.

  3. Staicu Ionuț-Bogdan

    Poate că exemplul nu a fost cel mai fericit ales (deh, proaspăt trezit și cu chef de scris :D ). Dar sunt situații în care ai de ales între cele două variante (și doar atât). De exemplu:

    var wrap = $('#wrap');
    $('.copil_1, .copil_2', wrap);
    // sau
    wrap.find('.copil_1, .copil_2');
    

    Cât despre lizibilitate… Greu de zis. Cred că-i destul de relativ. Mie mi se pare mai ușor de citit varianta contextuală.

  4. “find” isi are rostul doar daca ai obiectul contextual deja pregatit. Altfel o formulare ca asta :

    $('#parinte').find('.copil');

    sau asta:

    $('.copil', '#parinte');

    e doar o reprezentare mai lunga a:

    $('#parinte .copil');

    Ideal ar fi asta:

    wrap.find('.copil');

    Eu folosesc forma asta:

    $('.copil', wrap);
Show trackbacks

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>

windows apple dropbox facebook twitter