{"id":229204,"date":"2022-11-15T14:38:00","date_gmt":"2022-11-15T11:38:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229204"},"modified":"2022-11-15T14:38:22","modified_gmt":"2022-11-15T11:38:22","slug":"naer-aer-jquerys-klonfunktion-anvaendbar","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/naer-aer-jquerys-klonfunktion-anvaendbar\/","title":{"rendered":"N\u00e4r \u00e4r jQuerys klonfunktion anv\u00e4ndbar?"},"content":{"rendered":"\n<p>En av utmaningarna med att l\u00e4ra sig ett bibliotek (vare sig det \u00e4r standardbiblioteket med funktioner som kommer med ett programmeringsspr\u00e5k eller ett tredjepartsprojekt) \u00e4r tv\u00e5faldig:<\/p>\n<ol>\n<li>l\u00e4ra sig de funktioner som \u00e4r tillg\u00e4ngliga,<\/li>\n<li>l\u00e4ra sig att anv\u00e4nda dessa funktioner.<\/li>\n<\/ol>\n<p>Och faktiskt, ibland \u00e4r det inte s\u00e5 sv\u00e5rt att l\u00e4ra sig hur man anv\u00e4nder dessa funktioner \u2013 det \u00e4r att veta n\u00e4r man ska anv\u00e4nda en viss funktion f\u00f6r att hj\u00e4lpa till att minimera koden samtidigt som man uppn\u00e5r projektets m\u00e5l.<\/p>\n<h2>jQuerys klonfunktion<\/h2>\n<p>Ett exempel som kommer att t\u00e4nka p\u00e5 \u00e4r anv\u00e4ndningen av jQuerys <strong>klonfunktion<\/strong>. <a href=\"https:\/\/api.jquery.com\/clone\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Definitionen<\/a> av funktionen \u00e4r enkel:<\/p>\n<blockquote>\n<p>Metoden .clone() utf\u00f6r en djupkopia av upps\u00e4ttningen av matchade element, vilket inneb\u00e4r att den kopierar de matchade elementen s\u00e5v\u00e4l som alla deras underordnade element och textnoder.<\/p>\n<\/blockquote>\n<p>Det fina med funktionen \u00e4r att den \u00e4ven kan skapa en &quot;grund&quot; kopia av funktionen, vilket inneb\u00e4r att du kan kopiera elementen utan h\u00e4ndelsehanterare, underordnade element och s\u00e5 vidare.<\/p>\n<p>Beroende p\u00e5 dina behov kommer den ena att vara mer v\u00e4rdefull \u00e4n den andra. Men f\u00f6r det h\u00e4r inl\u00e4gget, anta att en djup kopia \u00e4r vad vi \u00e4r ute efter.<\/p>\n<h3>1 Ett potentiellt anv\u00e4ndningsfall<\/h3>\n<p>L\u00e5t oss s\u00e4ga att du har en upps\u00e4ttning bilder p\u00e5 en sida och f\u00f6r var och en av dessa bilder m\u00e5ste du l\u00e4gga till n\u00e5gon h\u00e4ndelsehanterare s\u00e5 att n\u00e5got h\u00e4nder n\u00e4r bilden klickas.<\/p>\n<ul>\n<li>kanske en modal dialogruta visas,<\/li>\n<li>kanske n\u00e5got skickas till servern via en asynkron beg\u00e4ran,<\/li>\n<li>kanske m\u00e5ste presentationen av sidan \u00e4ndras,<\/li>\n<li>etc.<\/li>\n<\/ul>\n<p>jag vet inte. Oavsett vad ditt fall kan vara, l\u00e5t oss s\u00e4ga att du har en bild eller en upps\u00e4ttning bilder och du m\u00e5ste visa en modal dialogruta n\u00e4r den klickas.<\/p>\n<h3>2 St\u00e4lla in koden<\/h3>\n<p>F\u00f6r att g\u00f6ra detta finns det flera saker vi beh\u00f6ver g\u00f6ra:<\/p>\n<ol>\n<li>l\u00e4gg till ett anpassat attribut till bilderna s\u00e5 att vi kan bifoga korrekta h\u00e4ndelsehanterare,<\/li>\n<li>st\u00e4ll in en del som har den markering vi vill visa med en viss bit HTML,<\/li>\n<li>anv\u00e4nda <strong>klon<\/strong> f\u00f6r att utnyttja, dra f\u00f6rdel av den del som vi har skrivit och duplicerat den efter behov.<\/li>\n<\/ol>\n<h4>Steg 1<\/h4>\n<p>Om du arbetar med WordPress och letar efter hur du l\u00e4gger till anpassade bildattribut kan du se en handledning f\u00f6r hur du g\u00f6r det i <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/laegga-till-anpassade-wordpress-bildattribut\/\" title=\"det h\u00e4r inl\u00e4gget\">det h\u00e4r inl\u00e4gget<\/a>.<\/p>\n<h4>Steg 2<\/h4>\n<p>Att skapa en del \u00e4r enkelt. Koden kan vara s\u00e5 enkel som <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-00-sample-markup-html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00f6ljande kodavsnitt<\/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>Och ja, du kan kl\u00e4 upp det med lite CSS och l\u00e4gga till lite anpassad kod till ett av elementen med PHP, men detta t\u00e4cker de absoluta grunderna.<\/p>\n<h4>Steg 3<\/h4>\n<p>L\u00e5t oss nu s\u00e4ga att f\u00f6r varje bild som finns p\u00e5 sidan (med ett anpassat attribut som <strong>data-type=&quot;acme&#8221;<\/strong> ), vill vi l\u00e4gga till en kopia av ovanst\u00e5ende element p\u00e5 sidan som \u00e4r relaterad till var och en av bilderna p\u00e5 sidan.<\/p>\n<p>F\u00f6r att g\u00f6ra detta beh\u00f6ver vi veta:<\/p>\n<ol>\n<li>n\u00e4r ett element klickas,<\/li>\n<li>det \u00e4r f\u00f6r\u00e4ldraelementet,<\/li>\n<li>och hur man l\u00e4gger till elementet med <strong>klonmetoden<\/strong>.<\/li>\n<\/ol>\n<p>S\u00e5 f\u00f6rst vill vi uppt\u00e4cka n\u00e4r en given bild klickas. F\u00f6r att g\u00f6ra detta kan vi <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-01-loop-through-images-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">g\u00e5 igenom alla bilder<\/a> p\u00e5 sidan s\u00e5 att vi kan bifoga en anpassad h\u00e4ndelsehanterare:<\/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>Sedan, n\u00e4r bilden klickas, hittar vi det \u00f6verordnade elementet i bilden som klickades p\u00e5 (och sedan sker <a href=\"https:\/\/gist.github.com\/tommcfarlin\/cdde5f1f6c63c25d981447e0e5874452#file-02-find-parent-elements-js\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">huvuddelen av arbetet<\/a> ).<\/p>\n<p>Det vill s\u00e4ga, vi tar en kopia av elementet tidigare i inl\u00e4gget, klonar det och l\u00e4gger till det i beh\u00e5llaren:<\/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>Och d\u00e5 kan vi arbeta sj\u00e4lvst\u00e4ndigt med var och en.<\/p>\n<h2>Ett par Gotchas<\/h2>\n<p>N\u00e4r du klonar element finns det n\u00e5gra saker du m\u00e5ste komma ih\u00e5g (som n\u00e4mns ovan). Specifikt:<\/p>\n<ul>\n<li>kom ih\u00e5g att du kan beh\u00f6va klonelement olika beroende p\u00e5 h\u00e4ndelsehanteraren,<\/li>\n<li>du kan beh\u00f6va skapa anpassade ID:n f\u00f6r ett visst element innan du l\u00e4gger till det p\u00e5 sidan,<\/li>\n<li>kanske ett element m\u00e5ste v\u00e4xlas n\u00e4r n\u00e5got klickas,<\/li>\n<li>och s\u00e5 vidare.<\/li>\n<\/ul>\n<p>Det finns m\u00e5nga s\u00e4tt att hantera ett klonat element, men n\u00e4r du g\u00f6r det, se till att n\u00e4r du <strong>klona<\/strong> ett element identifierar och hanterar du h\u00e4ndelser p\u00e5 r\u00e4tt s\u00e4tt, s\u00e5 att du inte f\u00e5r ober\u00e4kneliga resultat.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ett exempel p\u00e5 anv\u00e4ndningsfall f\u00f6r n\u00e4r jQuerys klonfunktion \u00e4r anv\u00e4ndbar och hur den \u00e4r till\u00e4mpbar i en verklig situation med bilder, beh\u00e5llare, h\u00e4ndelser och mer.<\/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":[848,734,901,724],"tags":[1173],"class_list":["post-229204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handledningar","category-javascript-9","category-koda","category-utvecklaren","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=229204"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/229204\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/165590"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=229204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=229204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=229204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}