{"id":230218,"date":"2022-11-15T14:10:00","date_gmt":"2022-11-15T11:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=230218"},"modified":"2022-11-15T14:28:18","modified_gmt":"2022-11-15T11:28:18","slug":"quando-e-utile-la-funzione-di-clonazione-di-jquery","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/quando-e-utile-la-funzione-di-clonazione-di-jquery\/","title":{"rendered":"Quando \u00e8 utile la funzione di clonazione di jQuery?"},"content":{"rendered":"\n<p>Una delle sfide dell&#8217;apprendimento di una libreria (che si tratti della libreria standard di funzioni fornita con un linguaggio di programmazione o di un progetto di terze parti) \u00e8 duplice:<\/p>\n<ol>\n<li>apprendimento delle funzioni disponibili,<\/li>\n<li>imparare a usare dette funzioni.<\/li>\n<\/ol>\n<p>E, in realt\u00e0, a volte anche imparare a utilizzare dette funzioni non \u00e8 poi cos\u00ec difficile: \u00e8 sapere quando utilizzare una determinata funzione per ridurre al minimo il codice pur raggiungendo gli obiettivi del progetto.<\/p>\n<h2>Funzione di clonazione di jQuery<\/h2>\n<p>Un esempio che mi viene in mente \u00e8 l&#8217;uso della funzione <strong>clone<\/strong> di jQuery. <a href=\"https:\/\/api.jquery.com\/clone\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">La definizione<\/a> della funzione \u00e8 semplice:<\/p>\n<blockquote>\n<p>Il metodo .clone() esegue una copia completa dell&#8217;insieme di elementi abbinati, il che significa che copia gli elementi abbinati cos\u00ec come tutti i loro elementi discendenti e nodi di testo.<\/p>\n<\/blockquote>\n<p>La cosa bella della funzione \u00e8 che pu\u00f2 anche creare una copia &quot;superficiale&quot; della funzione. Ci\u00f2 significa che puoi copiare gli elementi senza i gestori di eventi, gli elementi figlio e cos\u00ec via.<\/p>\n<p>A seconda delle tue esigenze, uno sar\u00e0 pi\u00f9 prezioso dell&#8217;altro. Ma, per questo post, supponiamo che una copia profonda sia ci\u00f2 che stiamo cercando.<\/p>\n<h3>1 Un potenziale caso d&#8217;uso<\/h3>\n<p>Diciamo che hai un insieme di immagini su una pagina e per ciascuna di queste immagini, devi aggiungere un gestore di eventi in modo che quando si fa clic sull&#8217;immagine succeda qualcosa.<\/p>\n<ul>\n<li>forse viene visualizzata una finestra di dialogo modale,<\/li>\n<li>forse qualcosa viene inviato al server tramite una richiesta asincrona,<\/li>\n<li>forse la presentazione della pagina deve cambiare,<\/li>\n<li>eccetera.<\/li>\n<\/ul>\n<p>Non lo so. Qualunque sia il tuo caso, supponiamo che tu abbia un&#8217;immagine o un insieme di immagini e devi visualizzare una finestra di dialogo modale quando viene cliccata.<\/p>\n<h3>2 Impostazione del codice<\/h3>\n<p>Per fare ci\u00f2, ci sono diverse cose che dobbiamo fare:<\/p>\n<ol>\n<li>aggiungi un attributo personalizzato alle immagini in modo da poter allegare gestori di eventi appropriati,<\/li>\n<li>impostare un parziale che ha il markup che vogliamo visualizzare con un determinato pezzo di HTML,<\/li>\n<li>usando <strong>clone<\/strong> per sfruttare sfruttare il parziale che abbiamo scritto e duplicato, se necessario.<\/li>\n<\/ol>\n<h4>Passo 1<\/h4>\n<p>Se stai lavorando con WordPress e stai cercando come aggiungere attributi di immagine personalizzati, puoi vedere un tutorial su come farlo in <a href=\"https:\/\/wordpress.mediadoma.com\/it\/aggiunta-di-attributi-immagine-wordpress-personalizzati\/\" title=\"questo post\">questo post<\/a>.<\/p>\n<h4>Passo 2<\/h4>\n<p>Creare un parziale \u00e8 semplice. Il codice potrebbe essere semplice come <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-00-sample-markup-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">il seguente snippet<\/a> :<\/p>\n<pre><code>&lt;p class=\"acme-element\"&gt;\n    &lt;span&gt;Acme&lt;\/span&gt;\n&lt;\/p&gt;&lt;!--- .acme-element --&gt;<\/code><\/pre>\n<p>E s\u00ec, potresti vestirlo con un po&#8217; di CSS e aggiungere del codice personalizzato a uno degli elementi usando PHP, ma questo copre le basi assolute.<\/p>\n<h4>Passaggio 3<\/h4>\n<p>Ora diciamo che per ogni immagine che esiste nella pagina (con un attributo personalizzato come <strong>data-type=&quot;acme&#8221;<\/strong> ), vogliamo aggiungere una copia dell&#8217;elemento sopra alla pagina relativa a ciascuna delle immagini nella pagina.<\/p>\n<p>Per fare ci\u00f2, dobbiamo sapere:<\/p>\n<ol>\n<li>quando si fa clic su un elemento,<\/li>\n<li>\u00e8 l&#8217;elemento genitore,<\/li>\n<li>e come aggiungere l&#8217;elemento usando il metodo <strong>clone .<\/strong><\/li>\n<\/ol>\n<p>Quindi, per prima cosa, vogliamo rilevare quando si fa clic su una determinata immagine. Per fare ci\u00f2, possiamo <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-01-loop-through-images-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">scorrere tutte le immagini<\/a> sulla pagina in modo da poter allegare un gestore di eventi personalizzato:<\/p>\n<pre><code>\/\/ Loop through each of the image with the custom data-types on the page.\n$('img[data-type=\"acme\"]').each(function() {\n\n  \/\/ ...\n\n});<\/code><\/pre>\n<p>Quindi, quando si fa clic sull&#8217;immagine, troviamo l&#8217;elemento padre dell&#8217;immagine su cui \u00e8 stato fatto clic (e quindi viene eseguita la <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-02-find-parent-elements-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">maggior parte del lavoro<\/a> ).<\/p>\n<p>Cio\u00e8, prendiamo una copia dell&#8217;elemento in precedenza nel post, lo cloniamo e lo aggiungiamo al contenitore:<\/p>\n<pre><code>var $this, $parent, $clone;\n\n\/\/ Loop through each of the image with the custom data-types on the page.\n$('img[data-type=\"acme\"]').each(function() {\n\n  $this = $(this);\n  $(this).on('click', function() {\n\n    \/\/ Reference the parent of the image that was clicked and clone the element.\n    $parent = $this.parent();\n    $clone  = $('.acme-element').clone(true);\n\n    \/\/ Next, append the cloned element to the parent.\n    $parent.append($clone);\n\n  });\n});<\/code><\/pre>\n<p>E poi possiamo lavorare con ciascuno in modo indipendente.<\/p>\n<h2>Alcuni trucchi<\/h2>\n<p>Quando si clonano elementi, ci sono alcune cose che devi ricordare (che sono menzionate sopra). Nello specifico:<\/p>\n<ul>\n<li>ricorda che potresti aver bisogno di clonare elementi in modo diverso a seconda del gestore dell&#8217;evento,<\/li>\n<li>potrebbe essere necessario creare ID personalizzati per un determinato elemento prima di aggiungerlo alla pagina,<\/li>\n<li>forse un elemento deve essere attivato quando si fa clic su qualcosa,<\/li>\n<li>e cos\u00ec via.<\/li>\n<\/ul>\n<p>Esistono numerosi modi per gestire un elemento clonato, ma ogni volta che lo fai, assicurati che quando <strong>cloni<\/strong> un elemento, stai identificando e gestendo correttamente gli eventi, in modo da non ottenere risultati irregolari.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un esempio di caso d&#8217;uso per quando la funzione clone di jQuery \u00e8 utile e come \u00e8 applicabile in una situazione reale con immagini, contenitori, eventi e altro.<\/p>\n","protected":false},"author":1,"featured_media":165590,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[896,731,720,844],"tags":[1168],"class_list":["post-230218","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codice","category-javascript-6","category-sviluppatore","category-tutorial","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=230218"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/230218\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/165590"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=230218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=230218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=230218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}