How to Create Custom Filters in jQuery

How to Create Custom Filters in jQuery
by Janeth Kent Date: 17-12-2013 jquery css resources tutorials tips plugins snippets webdev

If you are a web designer or a developer you frequently need a shortcut to collect elements for jQuery.

In this post, based on the book Instant jQuery Selectors, you’ll learn how to build a custom filter in jQuery.

So, we try to built a filter that ia able to print the length of the elements that have the placeholder attribute set, taking advantage of a previously created custom filter. In addition, to see all of the available options in action, we’ll create a second filter to collect all of the elements having a name with less than a given number of characters.

Well, we have to follow 4 steps:

Step 1

Create a file using a simple text editor, like Notepad++ and rename it as custom-filters.html.

Step 2

Then, we’ll create a simple form with the typical fields like “Name”, “Surname”... All these fields have the specification of the type (type attribute) and the name (name attribute), but few of them also have a placeholder set (placeholder attribute).

<!DOCTYPE html>
<html>
   <head>
      <meta charset="UTF-8">
      <title>Instant jQuery Selector How-to</title>
      <style>
         input,
         select,
         textarea
         {
            display: block;
         }
      </style>
      <!-- Script will be placed here... -->
   </head>
   <body>
      <form name="registration-form" id="registration-form" action="registration.php" method="post">
         <label>Name:</label>
         <input type="text" name="name" placeholder="Name" />
         <label>Surname:</label>
         <input type="text" name="surname" placeholder="Surname" />
         <label>Email:</label>
         <input type="email" name="email" placeholder="Email" />
         <label>Phone:</label>
         <input type="tel" name="phone-number" placeholder="Phone number" disabled="disabled" />
         <label>Privacy:</label>
         <input name="privacy" type="checkbox" checked="checked" />
         <label>Contact me:</label>
         <input name="contact-me" type="checkbox" />
         <label>Sex:</label>
         <select name="sex">
            <option selected="selected" value="m">Male</option>
            <option value="f">Female</option>
         </select>
         <input type="submit" value="Register" />
      </form>
   </body>
</html>

Step 3

Replace the comment we put in the HTML () with the following code:

 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script>
    $.expr[':'].placeholder = function(elem) {
        return $(elem).attr('placeholder') !== undefined;
    };
    $.expr[':'].nameLengthLessThan = 
    $.expr.createPseudo(function(filterParam) {
        var length = parseInt(filterParam);
        return function(elem, context, isXml) {
            return $(elem).attr('name') !== undefined && 
            $(elem).attr('name').length < length;
      }
    });
    $(document).ready(function() {
        console.log($(':placeholder').length);
        console.log($('input:nameLengthLessThan(5)').length);
    });
</script>

Step 4

Save the file and try to open it with whatever browser. Then, look at the console’s output.

How it works

At the very beginning of our Script, we’ve added a property, or more specifically a function called placeholder to the :  attribute that belongs to the jQuery’s expr attribute. : is a property containing jQuery’s native filters and you can use it to add your own at runtime.

Inside the function definition, we just have a single statement that checks if the current element has the placeholder attribute set, and if so, it returns true to keep the element.

As you can see from the example, a filter is a function that accepts as an argument the current DOM element to process and needs to return true to keep it in the collection, and false to discard it.

You should use this method for creating a filter when the following are true:

  • You’re interested only in the element to process itself
  • The filter doesn’t accept an argument
  • The context to which the selection is applied doesn’t matter

The second filter, nameLengthLessThan, is a bit more complicated and uses the method introduced starting from jQuery 1.8 by witch we pass an anonymous function to the create a pseudo function having a parameter that represents the argument passed to the filter when you use it.

Then, inside it, we create another function that will be returned and that is responsible for performing the filtering.

Finally, jQuery passes the element to be processed (elem parameter), the DOM Element or DOM Document from which selection will occur (context parameter), and a Boolean that tells if you’re operating on an XML document.

This filter needs this pattern because our filter needs to know the limit of characters the name attribute of the element must comply with.

In other words, we need to pass the number of characters the value of the name attribute must respect.

Inside the inner-most function, we write the code to test if the element should be kept or not. For our example, this means checking whether the name attribute is set and its length is not less than the given length (stored using a closure inside the length variable).

Now that we’ve created the filters, we need to use them. Inside the handler for the document.ready event, there are two statements. The first calls the placeholder filter without parameters and implicitly using the Universal selector. The second uses the nameLengthLessThan filter passing 5 as parameter and using the Element selector. Using the Element selector in the second call will result in a performance improvement. Running the code will result in the following being printed in the console:

4  1

 

 

original source: http://flippinawesome.org/

 
by Janeth Kent Date: 17-12-2013 jquery css resources tutorials tips plugins snippets webdev hits : 10277  
 
Janeth Kent

Janeth Kent

Licenciada en Bellas Artes y programadora por pasión. Cuando tengo un rato retoco fotos, edito vídeos y diseño cosas. El resto del tiempo escribo en MA-NO WEB DESIGN AND DEVELOPMENT.

 
 
 

Related Posts

New graphic window units - CSS

''Intercop 2022' is a project announced by Google, Microsoft, Apple and the Mozzilla Foundation to make all browsers offer the same web experience. The project has 15 focus areas and one…

Let's create a Color Picker from scratch with HTML5 Canvas, Javascript and CSS3

HTML5 Canvas is a technology that allows developers to generate real-time graphics and animations using JavaScript. It provides a blank canvas on which graphical elements, such as lines, shapes, images…

Why shouldn't we use black?

Nowadays it is becoming more and more common for web pages to have the option to set them in dark mode, or to base their aesthetics directly on black or…

How to make your own custom cursor for your website

When I started browsing different and original websites to learn from them, one of the first things that caught my attention was that some of them had their own cursors,…

Nesting: future proofing CSS

Although not currently supported by browsers, there is a proposal for CSS nesting to support a feature that would provide better readability to native CSS, so in the future it…

Use the SRCSET attribute to improve your SEO

There is a new standard HTML attribute that can be used in conjunction with IMG called SRCSET. It is new and important as it allows webmasters to display different images…

Starting with Bootstrap-Vue step by step

Today we will show you how to use BootstrapVue, describe the installation process and show basic functionality. The project’s based on the world's most popular CSS framework - Bootstrap, for building…

Bootstrap 5 beta2. What offers?

Since the release of the Bootstrap 4 is three years, in this article we will present what is new in the world’s most popular framework for building responsive, mobile-first sites.…

Interesting and Helpful Google Search Features You’ll Want to Start Using

Google – THE search engine for many internet users. It has been with us since its launch back in 1998 and thanks to its simplicity of use and genius algorithms,…

Creating simple CSS spinner-loader

In today's article we will show you how to animate a basic loader that spins when some predefined action is defined, such as loading an image. That can be used…

How to use Parallax.js effect on your website

Today, we're going to write about the parallax effect, similar to parallax scrolling, and how to implement it to improve your landing page. In webdev, they say mobile first -…

How to use your browser as a file browser, in Chrome or Microsoft Edge

We're going to explain how to use the Chrome browser as a file browser, both on Android and on your computer. This is a hidden feature of Chromium that will…

Clicky