{"id":170,"date":"2013-09-16T11:00:33","date_gmt":"2013-09-16T11:00:33","guid":{"rendered":"http:\/\/aurelio.audero.it\/blog\/?p=170"},"modified":"2022-08-16T23:04:52","modified_gmt":"2022-08-16T23:04:52","slug":"15-tips-to-improve-your-jquery-selectors","status":"publish","type":"post","link":"https:\/\/www.audero.it\/blog\/2013\/09\/16\/15-tips-to-improve-your-jquery-selectors\/","title":{"rendered":"15 Tips to Improve Your jQuery Selectors"},"content":{"rendered":"<p>Who don&#8217;t know what <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener\">jQuery<\/a> is and how it can help in developing a web project. Based on the latest statistics, <a href=\"https:\/\/trends.builtwith.com\/javascript\/jQuery\" target=\"_blank\" rel=\"noopener\">jQuery is used on ~60% of the Quantcast Top 100k<\/a> websites. We use it constantly and sometimes we tend to think it&#8217;s almost magic, that jQuery is capable to understand what we want to achieve and optimize all for us. There is no need to say this is wrong. You need to be aware of what jQuery does and does not for you and optimize as much as you can to improve your website&#8217;s performance.<\/p>\n<p>In this article, extracted from my book <a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\">Instant jQuery Selectors<\/a>, you&#8217;ll learn some useful tips and tricks to improve the performance of your website by simply selecting elements in the right way.<br \/>\n<!--more--><br \/>\nPlease note that, to be a complete post, it has some minor adjustments compared to the original recipe titled <cite>How to have efficient selectors (Become an expert)<\/cite>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"797\" data-permalink=\"https:\/\/www.audero.it\/blog\/2013\/09\/16\/15-tips-to-improve-your-jquery-selectors\/jquery-logo-2\/\" data-orig-file=\"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png\" data-orig-size=\"1666,833\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo-1024x512.png\" src=\"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png\" alt=\"jquery logo\" width=\"1666\" height=\"833\" class=\"aligncenter size-full wp-image-797\" srcset=\"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png 1666w, https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo-300x150.png 300w, https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo-1024x512.png 1024w\" sizes=\"auto, (max-width: 1666px) 100vw, 1666px\" \/><\/p>\n<div class=\"note clearfix\">\n<a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"alignleft\" src=\"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/instant-jquery-selectors-cover.png\" alt=\"Instant jQuery Selectors cover\"  \/><\/a><br \/>\nThis article is extracted from my book <a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\">Instant jQuery Selectors<\/a>. Consider buying it on the <a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\">Packt Publishing website<\/a> or on <a href=\"https:\/\/www.amazon.com\/Instant-jQuery-Selectors-ebook\/dp\/B00ESX17MU\/\" target=\"_blank\" rel=\"noopener\">Amazon<\/a>.<\/p>\n<p><cite>Instant jQuery Selectors<\/cite> is a practical guide that will teach you how to use jQuery&#8217;s selectors efficiently in order to easily select the elements of your pages to operate upon with jQuery&#8217;s methods. You will go through the most common problems that you could face while developing your project and will learn how to solve them with the help of focused examples that <cite>Instant jQuery Selectors<\/cite> has to offer.\n<\/div>\n<h2>How to do it&#8230;<\/h2>\n<p>To boost the performances, keep in mind the following points.<\/p>\n<h3>1. Avoid the Universal Selector<\/h3>\n<p>Don&#8217;t use the Universal selector (explicitly or implicitly). Never! Seriously!<\/p>\n<h3>2. Rely on Native Functions<\/h3>\n<p>The best selectors are the Id, Class and Element selectors, because under the hood jQuery uses native JavaScript functions.<\/p>\n<h3>3. Id selector is the Best<\/h3>\n<p>The best performances are achieved using the ID selector.<\/p>\n<h3>4. Don&#8217;t Overqualify the Id Selector<\/h3>\n<p>Never prepend a tag name before an id, it&#8217;ll slow down the selector. For example, <em>don&#8217;t<\/em> turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#content')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('div#content')<\/pre>\n<p>jQuery starts parsing the selector using a regular expression. If it discloses that the selectors is an id, because it starts with a sharp (<code>#<\/code>), behind the scenes jQuery will use the JavaScript native <code>getElementById()<\/code> method, that is very fast.<\/p>\n<h3>5. Start with the Id Selector when Possible<\/h3>\n<p>If your selection needs more than one selector, start with the Id selector if possible. For example:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#content p.border')<\/pre>\n<h3>6. Don&#8217;t Forget to Use the <em>context<\/em> Parameter<\/h3>\n<p>Remember to use the <code>context<\/code> parameter or the <code>find()<\/code> method when possible. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#content p.border')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('p.border', '#content')<\/pre>\n<p>or even better into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#content').find('p.border')<\/pre>\n<p>The reason is that the jQuery constructor will do nothing but convert <code>$('p.border', '#content')<\/code> into <code>$('#content').find('p.border')<\/code>. If you look at the source code, you&#8217;ll find these lines:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n\/\/ HANDLE: $(expr, context) \r\n\/\/ (which is just equivalent to: $(context).find(expr) \r\n} else { \r\n   return this.constructor( context ).find( selector );\r\n}\r\n<\/pre>\n<h3>7. Be More Specific on the Right Side<\/h3>\n<p>jQuery&#8217;s selectors engine, called <a href=\"https:\/\/github.com\/jquery\/sizzle\" target=\"_blank\" rel=\"noopener\">Sizzle<\/a>, parses selectors from right to left. Therefore, to speed up your selection, be more specific on the right part and less on the left. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('div.wrapper .border')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.wrapper p.border')<\/pre>\n<h3>8. Don&#8217;t be too Specific<\/h3>\n<p>Don&#8217;t be too specific if the same set can be selected with less selectors. For example:<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#content p.border')<\/pre>\n<p>is better than<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#content div.wrapper div p.border')<\/pre>\n<h3>9. Don&#8217;t be too Generic when Using Filters<\/h3>\n<p>If you need to use a filter, it&#8217;s always better to narrow down the set of elements and then use the filter. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$(':enabled')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#formId').find(':enabled')<\/pre>\n<p>or even better<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('#formId').find('input:enabled')<\/pre>\n<h3>10. Use <em>filter()<\/em> instead of jQuery&#8217;s Selectors Extension<\/h3>\n<p>Filters such as, <code>:button<\/code>, <code>:checkbox<\/code>, <code>:visible<\/code>, <code>:input<\/code>, and others are a jQuery extension and not part of the CSS specification, so they can&#8217;t take advantage of the performance provided by <code>querySelectorAll()<\/code>. To have better performance, it&#8217;s better to first select elements using a pure CSS selector and then filter using <code>filter()<\/code> (that is, <code>.filter(':input')<\/code>).<\/p>\n<h3>11. Use the Attribute Selector instead of jQuery&#8217;s Selectors Extension<\/h3>\n<p>Filters such as, <code>:image<\/code>, <code>:text<\/code>, <code>:password<\/code>, <code>:reset<\/code> and others are a jQuery extension and not part of the CSS specification, so they can&#8217;t take advantage of the performance provided by <code>querySelectorAll()<\/code>. To have better performance, it&#8217;s better to select using the attribute selector. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$(':reset')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('&#x5B;type=reset]')<\/pre>\n<h3>12. Be Careful of Not Equal Attribute Selector<\/h3>\n<p>To improve the performance of the Not Equal attribute selector in browsers that support <code>querySelectorAll()<\/code>, use the <code>not()<\/code> method. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.border &#x5B;placeholder!=Age]')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.border').not('&#x5B;placeholder=Age]')<\/pre>\n<h3>13. Be Careful of the <em>:lt()<\/em> Filter<\/h3>\n<p>To improve the performance of <code>:lt()<\/code> filter in modern browsers, use the <code>slice()<\/code> method. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.border:lt(2)')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.border').slice(0, 3)<\/pre>\n<h3>14. Be Careful of the <em>:gt()<\/em> Filter<\/h3>\n<p>To improve the performance of the <code>:gt()<\/code> filter in modern browsers, use the <code>slice()<\/code> method. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.border:gt(2)')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('.border').slice(3)<\/pre>\n<h3>15. Be Careful of the <em>:has()<\/em> Filter<\/h3>\n<p>To improve the performance of the <code>:has()<\/code> filter in modern browsers, use the <code>has()<\/code> method. For example, turn<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('div:has(p.border)')<\/pre>\n<p>into<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">$('div').has('p.border')<\/pre>\n<h2>Conclusions<\/h2>\n<p>In this article I explained how you can improve the performance of your web pages simply paying attention to how you select elements using jQuery. Keep in mind that these tips aren&#8217;t magic, so just applying them your page that currently loads in 10 seconds won&#8217;t turn into one that loads in 2 seconds. However, if your operations on the elements you retrieve are complex enough, just tweaking your selectors you can see some performance improvements.<\/p>\n<div class=\"note clearfix\">\n<a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" class=\"alignleft\" src=\"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/instant-jquery-selectors-cover.png\" alt=\"Instant jQuery Selectors cover\"  \/><\/a><br \/>\nIf you liked this article, consider buying my book <a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\">Instant jQuery Selectors<\/a> on the <a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\">Packt Publishing website<\/a> or on <a href=\"https:\/\/www.amazon.com\/Instant-jQuery-Selectors-ebook\/dp\/B00ESX17MU\/\" target=\"_blank\" rel=\"noopener\">Amazon<\/a>.<\/p>\n<p><cite>Instant jQuery Selectors<\/cite> is for web developers who want to delve into jQuery from its very starting point: selectors. Even if you&#8217;re already familiar with the framework and its selectors, you could find several tips and tricks that you aren&#8217;t aware of, especially about performance and how jQuery acts behind the scenes.\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Who don&#8217;t know what <a href=\"https:\/\/jquery.com\/\" target=\"_blank\" rel=\"noopener\">jQuery<\/a> is and how it can help in developing a web project. Based on the latest statistics, <a href=\"https:\/\/trends.builtwith.com\/javascript\/jQuery\" target=\"_blank\" rel=\"noopener\">jQuery is used on ~60% of the Quantcast Top 100k<\/a> websites. We use it constantly and sometimes we tend to think it&#8217;s almost magic, that jQuery is capable to understand what we want to achieve and optimize all for us. There is no need to say this is wrong. You need to be aware of what jQuery does and does not for you and optimize as much as you can to improve your website&#8217;s performance.<\/p>\n<p>In this article, extracted from my book <a href=\"https:\/\/www.packtpub.com\/product\/instant-jquery-selectors\/9781783282210\" target=\"_blank\" rel=\"noopener\">Instant jQuery Selectors<\/a>, you&#8217;ll learn some useful tips and tricks to improve the performance of your website by simply selecting elements in the right way.<\/p>\n","protected":false},"author":1,"featured_media":153,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[22,46,8,20,23,11],"class_list":["post-170","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-javascript","tag-book","tag-javascript","tag-jquery","tag-jquery-selectors","tag-performance","tag-web"],"jetpack_featured_media_url":"https:\/\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jQuery-logo.png","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9Or4e-2K","jetpack-related-posts":[{"id":140,"url":"https:\/\/www.audero.it\/blog\/2013\/09\/03\/instant-jquery-selectors-my-first-book-is-out\/","url_meta":{"origin":170,"position":0},"title":"Instant jQuery Selectors: My first book is out!","author":"Aurelio De Rosa","date":"September 3, 2013","format":false,"excerpt":"Today I'm really pleased to announce that few days ago my first book, titled Instant jQuery Selectors, was published by the Packt Publishing. Publishing a book has always been one of my goals since I started my developer career, and now that I realized it I can't explain how I'm\u2026","rel":"","context":"In &quot;News&quot;","block_context":{"text":"News","link":"https:\/\/www.audero.it\/blog\/category\/news\/"},"img":{"alt_text":"Instant jQuery selectors cover","src":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/10\/instant-jquery-selectors-cover.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":148,"url":"https:\/\/www.audero.it\/blog\/2013\/09\/05\/how-to-create-custom-filters-in-jquery\/","url_meta":{"origin":170,"position":1},"title":"How to Create Custom Filters in jQuery","author":"Aurelio De Rosa","date":"September 5, 2013","format":false,"excerpt":"In some cases you may need a shortcut to collect elements for which jQuery doesn't provide a specific filter. This is exactly where custom filters come into play. In this article, extracted from my book Instant jQuery Selectors, you'll learn how to build a custom filter in jQuery. Please note\u2026","rel":"","context":"In &quot;JavaScript&quot;","block_context":{"text":"JavaScript","link":"https:\/\/www.audero.it\/blog\/category\/javascript\/"},"img":{"alt_text":"jquery logo","src":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/09\/jquery-logo.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":203,"url":"https:\/\/www.audero.it\/blog\/2013\/10\/15\/codemotion-madrid-2013-giveaway-win-a-free-copy-of-instant-jquery-selectors\/","url_meta":{"origin":170,"position":2},"title":"Codemotion Madrid 2013 Giveaway: Win a Free Copy of Instant jQuery Selectors","author":"Aurelio De Rosa","date":"October 15, 2013","format":false,"excerpt":"As some of you may be already aware, on Saturday October 19th 2013 I'll speak at Codemotion Madrid with a talk titled People don't give a f**k of JavaScript. If you didn't know it, it's because you don't follow me on Twitter and you're a bad guy or girl. Anyway,\u2026","rel":"","context":"In &quot;General&quot;","block_context":{"text":"General","link":"https:\/\/www.audero.it\/blog\/category\/general\/"},"img":{"alt_text":"Instant jQuery selectors cover","src":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2013\/10\/instant-jquery-selectors-cover.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":329,"url":"https:\/\/www.audero.it\/blog\/2014\/09\/19\/resources-beginner-front-end-developers\/","url_meta":{"origin":170,"position":3},"title":"Resources for Beginner Front-end Developers","author":"Aurelio De Rosa","date":"September 19, 2014","format":false,"excerpt":"Few weeks ago I received an email from a developer asking me for suggestions on how to delve into the front-end world. After having replied to this email, I thought that it'd have been nice to share the same suggestions on my blog. That's exactly what you'll find in this\u2026","rel":"","context":"In &quot;Discussions &amp; Opinions&quot;","block_context":{"text":"Discussions &amp; Opinions","link":"https:\/\/www.audero.it\/blog\/category\/discussions-opinions\/"},"img":{"alt_text":"html5 css3 javascript logos","src":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2014\/09\/front-end-stack.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2014\/09\/front-end-stack.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2014\/09\/front-end-stack.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2014\/09\/front-end-stack.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2014\/09\/front-end-stack.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":599,"url":"https:\/\/www.audero.it\/blog\/2016\/10\/03\/5-reasons-start-writing-technical-articles\/","url_meta":{"origin":170,"position":4},"title":"5 reasons why you should start writing technical articles","author":"Aurelio De Rosa","date":"October 3, 2016","format":false,"excerpt":"A few weeks ago, LinkedIn has reminded me that it was four years ago (on the 8th of September 2012) when my first technical article, titled Create Your Own HTML5 Environmental Thermometer, went live. The article was published by SitePoint at a time where the editor was Tom Museth (still\u2026","rel":"","context":"In &quot;Discussions &amp; Opinions&quot;","block_context":{"text":"Discussions &amp; Opinions","link":"https:\/\/www.audero.it\/blog\/category\/discussions-opinions\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2016\/10\/knowledge.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2016\/10\/knowledge.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2016\/10\/knowledge.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2016\/10\/knowledge.jpg?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/www.audero.it\/blog\/wp-content\/uploads\/2016\/10\/knowledge.jpg?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":217,"url":"https:\/\/www.audero.it\/blog\/2013\/11\/05\/my-experience-at-codemotion-madrid-2013\/","url_meta":{"origin":170,"position":5},"title":"My Experience at Codemotion Madrid 2013","author":"Aurelio De Rosa","date":"November 5, 2013","format":false,"excerpt":"As I announced in September, on the 19th October 2013 I spoke at Codemotion Madrid 2013 presenting a talk titled People don't give a f**k of JavaScript, where I showed some new HTML5 APIs. This article is a wrap up of my experience at the event, both as a speaker\u2026","rel":"","context":"In &quot;Discussions &amp; Opinions&quot;","block_context":{"text":"Discussions &amp; Opinions","link":"https:\/\/www.audero.it\/blog\/category\/discussions-opinions\/"},"img":{"alt_text":"Friends of Codemotion Madrid 2013","src":"https:\/\/i0.wp.com\/aurelio.audero.it\/blog\/wp-content\/uploads\/2013\/11\/friends-of-codemotion-madrid-2013-300x225.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/posts\/170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/comments?post=170"}],"version-history":[{"count":35,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/posts\/170\/revisions"}],"predecessor-version":[{"id":951,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/posts\/170\/revisions\/951"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/media\/153"}],"wp:attachment":[{"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/media?parent=170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/categories?post=170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.audero.it\/blog\/wp-json\/wp\/v2\/tags?post=170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}