Profile photo of Travis Horn Travis Horn

A small function to convert an array of ID strings into a dictionary of jQuery objects

2016-07-16
A small function to convert an array of ID strings into a dictionary of jQuery objects

I often use jQuery to modify the DOM. The simplest way to do this is to use jQuery’s query selector and a modifier function.

$('#intro').css('background-color', 'green');

If you have to perform multiple actions on the same element, you can keep using this selector.

$('#intro').css('background-color', 'green');

// Later...

$('#intro').hide();

Instead of searching the DOM every time we want to access this element, it is much more efficient to search for it once and store it in a variable.

var intro = $('#intro');

intro.css('background-color', 'green');

// Later...

intro.hide();

If you have many elements to access…

var intro = $('#intro');
var header = $('#header');
var button = $('#button');
var form = $('#form');
var alert = $('#alert');
var footer = $('#footer');
// etc...

it may be wise to put them all into a “dictionary” object.

var dom = {
  intro: $('#intro'),
  header: $('#header'),
  button: $('#button'),
  form: $('#form'),
  alert: $('#alert'),
  footer: $('#footer'),
  /// etc...
};

This way they can be accessed by dot (or bracket) notation from the main object.

dom.intro.css('background-color', 'green');
dom.header.hide();

dom['outro'].text('Goodbye.');
dom['alert'].show();

Writing the dictionary seems inefficient because there’s a lot of duplicated words. As long as your element IDs are also valid JavaScript variable names, we can automatically convert the IDs into variables with a small function.

The idsToJqObjects function

var idsToJqObjects = function(arr) {
  return arr
    .reduce(function addJqToObject(obj, newKey) {
      obj[newKey] = $('#' + newKey);
      return obj;
    }, {});
};

Use it in this way:

var dom = idstoJqObjects([
  'intro',
  'header',
  'button',
  'form',
  'alert',
  'footer',
  // etc...
]);

Your jQuery objects can be accessed with the same dot or bracket notation as before, without having to write duplicate code for each ID/variable.

Cover photo by Kalliop3 under CC BY-SA 2.0.

Here are some more articles you might like: