{"id":229879,"date":"2022-11-15T14:20:00","date_gmt":"2022-11-15T11:20:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229879"},"modified":"2022-11-15T14:21:38","modified_gmt":"2022-11-15T11:21:38","slug":"quand-la-fonction-clone-de-jquery-est-elle-utile","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/quand-la-fonction-clone-de-jquery-est-elle-utile\/","title":{"rendered":"Quand la fonction Clone de jQuery est-elle utile\u00a0?"},"content":{"rendered":"\n<p>L&rsquo;un des d\u00e9fis de l&rsquo;apprentissage d&rsquo;une biblioth\u00e8que (qu&rsquo;il s&rsquo;agisse de la biblioth\u00e8que standard de fonctions fournies avec un langage de programmation ou d&rsquo;un projet tiers) est double\u00a0:<\/p>\n<ol>\n<li>apprendre les fonctions disponibles,<\/li>\n<li>apprendre \u00e0 utiliser lesdites fonctions.<\/li>\n<\/ol>\n<p>Et, vraiment, parfois m\u00eame apprendre \u00e0 utiliser ces fonctions n&rsquo;est pas si difficile &#8211; il s&rsquo;agit de savoir quand utiliser une fonction donn\u00e9e pour aider \u00e0 minimiser le code tout en atteignant les objectifs du projet.<\/p>\n<h2>Fonction de clonage de jQuery<\/h2>\n<p><strong>Un exemple qui me vient \u00e0 l&rsquo;esprit est l&rsquo;utilisation de la fonction clone<\/strong> de jQuery. <a href=\"https:\/\/api.jquery.com\/clone\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">La d\u00e9finition<\/a> de la fonction est simple :<\/p>\n<blockquote>\n<p>La m\u00e9thode .clone() effectue une copie compl\u00e8te de l&rsquo;ensemble des \u00e9l\u00e9ments correspondants, ce qui signifie qu&rsquo;elle copie les \u00e9l\u00e9ments correspondants ainsi que tous leurs \u00e9l\u00e9ments descendants et n\u0153uds de texte.<\/p>\n<\/blockquote>\n<p>La bonne chose \u00e0 propos de la fonction est qu&rsquo;elle peut \u00e9galement cr\u00e9er une copie &quot;superficielle&quot; de la fonction. Cela signifie que vous pouvez copier les \u00e9l\u00e9ments sans les gestionnaires d&rsquo;\u00e9v\u00e9nements, les \u00e9l\u00e9ments enfants, etc.<\/p>\n<p>Selon vos besoins, l&rsquo;un sera plus pr\u00e9cieux que l&rsquo;autre. Mais, pour ce post, supposons qu&rsquo;une copie compl\u00e8te est ce que nous recherchons.<\/p>\n<h3>1 Un cas d&rsquo;utilisation potentiel<\/h3>\n<p>Disons que vous avez un ensemble d&rsquo;images sur une page et pour chacune de ces images, vous devez ajouter un gestionnaire d&rsquo;\u00e9v\u00e9nements afin que lorsque l&rsquo;on clique sur l&rsquo;image, quelque chose se passe.<\/p>\n<ul>\n<li>peut-\u00eatre qu&rsquo;une bo\u00eete de dialogue modale appara\u00eet,<\/li>\n<li>peut-\u00eatre que quelque chose est envoy\u00e9 au serveur via une requ\u00eate asynchrone,<\/li>\n<li>peut-\u00eatre que la pr\u00e9sentation de la page doit changer,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Je ne sais pas. Quel que soit votre cas, disons que vous avez une image ou un ensemble d&rsquo;images et que vous devez afficher une bo\u00eete de dialogue modale lorsque vous cliquez dessus.<\/p>\n<h3>2 Configuration du code<\/h3>\n<p>Pour ce faire, il y a plusieurs choses que nous devons faire :<\/p>\n<ol>\n<li>ajoutez un attribut personnalis\u00e9 aux images afin que nous puissions attacher les gestionnaires d&rsquo;\u00e9v\u00e9nements appropri\u00e9s,<\/li>\n<li>mettre en place un partiel qui a le balisage que nous voulons afficher avec un morceau de HTML donn\u00e9,<\/li>\n<li>utiliser <strong>clone<\/strong> pour tirer parti du partiel que nous avons \u00e9crit et dupliqu\u00e9, si n\u00e9cessaire.<\/li>\n<\/ol>\n<h4>\u00c9tape 1<\/h4>\n<p>Si vous travaillez avec WordPress et cherchez comment ajouter des attributs d&rsquo;image personnalis\u00e9s, vous pouvez voir un tutoriel sur la fa\u00e7on de le faire dans <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/ajout-dattributs-dimage-wordpress-personnalises\/\" title=\"ce post\">ce post<\/a>.<\/p>\n<h4>\u00c9tape 2<\/h4>\n<p>Cr\u00e9er un partiel est simple. Le code pourrait \u00eatre aussi simple que <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-00-sample-markup-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&rsquo;extrait suivant<\/a>\u00a0:<\/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>Et oui, vous pouvez l&rsquo;habiller avec un peu de CSS et ajouter du code personnalis\u00e9 \u00e0 l&rsquo;un des \u00e9l\u00e9ments en utilisant PHP, mais cela couvre les bases absolues.<\/p>\n<h4>\u00c9tape 3<\/h4>\n<p>Supposons maintenant que pour chaque image qui existe sur la page (avec un attribut personnalis\u00e9 tel que <strong>data-type=&quot;acme&quot;<\/strong> ), nous souhaitons ajouter une copie de l&rsquo;\u00e9l\u00e9ment ci-dessus \u00e0 la page associ\u00e9e \u00e0 chacune des images de la page.<\/p>\n<p>Pour ce faire, nous devons savoir :<\/p>\n<ol>\n<li>lorsqu&rsquo;un \u00e9l\u00e9ment est cliqu\u00e9,<\/li>\n<li>c&rsquo;est l&rsquo;\u00e9l\u00e9ment parent,<\/li>\n<li>et comment ajouter l&rsquo;\u00e9l\u00e9ment \u00e0 l&rsquo;aide de la\u00a0 m\u00e9thode <strong>clone<\/strong>.<\/li>\n<\/ol>\n<p>Donc, d&rsquo;abord, nous voulons d\u00e9tecter quand une image donn\u00e9e est cliqu\u00e9e. Pour ce faire, nous pouvons <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-01-loop-through-images-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">parcourir toutes les images<\/a> de la page afin de pouvoir attacher un gestionnaire d&rsquo;\u00e9v\u00e9nements personnalis\u00e9\u00a0:<\/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>Ensuite, lorsque l&rsquo;on clique sur l&rsquo;image, on trouve l&rsquo;\u00e9l\u00e9ment parent de l&rsquo;image qui a \u00e9t\u00e9 cliqu\u00e9 (et ensuite le <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-02-find-parent-elements-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">gros du travail<\/a> se fait).<\/p>\n<p>Autrement dit, nous prenons une copie de l&rsquo;\u00e9l\u00e9ment plus t\u00f4t dans le message, le clonons et l&rsquo;ajoutons au conteneur\u00a0:<\/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>Et puis nous pouvons travailler avec chacun ind\u00e9pendamment.<\/p>\n<h2>Quelques pi\u00e8ges<\/h2>\n<p>Lors du clonage d&rsquo;\u00e9l\u00e9ments, il y a quelques points dont vous devez vous souvenir (qui sont mentionn\u00e9s ci-dessus). Sp\u00e9cifiquement:<\/p>\n<ul>\n<li>rappelez-vous que vous pouvez avoir besoin d&rsquo;\u00e9l\u00e9ments clones diff\u00e9remment selon le gestionnaire d&rsquo;\u00e9v\u00e9nements,<\/li>\n<li>vous devrez peut-\u00eatre cr\u00e9er des identifiants personnalis\u00e9s pour un \u00e9l\u00e9ment donn\u00e9 avant de l&rsquo;ajouter \u00e0 la page,<\/li>\n<li>peut-\u00eatre qu&rsquo;un \u00e9l\u00e9ment doit \u00eatre bascul\u00e9 lorsque quelque chose est cliqu\u00e9,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>Il existe de nombreuses fa\u00e7ons de g\u00e9rer un \u00e9l\u00e9ment clon\u00e9, mais chaque fois que vous le faites, assurez-vous que lorsque vous <strong>clonez<\/strong> un \u00e9l\u00e9ment, vous identifiez et g\u00e9rez correctement les \u00e9v\u00e9nements, afin de ne pas obtenir de r\u00e9sultats erratiques.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <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 exemple de cas d&rsquo;utilisation pour savoir quand la fonction de clonage de jQuery est utile et comment elle est applicable dans une situation r\u00e9elle avec des images, des conteneurs, des \u00e9v\u00e9nements, etc.<\/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":[893,717,728,841],"tags":[1167],"class_list":["post-229879","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-javascript-3","category-tutoriels","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229879","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=229879"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/229879\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/165590"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=229879"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=229879"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=229879"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}