Organizing jQuery code is not easy. Up to now, especially on small/medium scale projects, I used to have a huge jQuery ready function and place all my code there. Some times if I needed to run something on specific elements I was just doing a quick test to check if the element was on the document.
$(document).ready(function () {
//jQuery code...
if ($(".someClass").length) {
// if element exists then run the below code
// Do something
}
});
The above technique is not too bad, it works just fine for a small or medium sized site, but what happens with a larger site that uses heavy javascript code? The answer came from a presentation I watched recently (Simple JavaScript & CSS Management With Rack by Mr. Avand Amiri - I strongly encourage you to watch it as well). The solution is really clean and pretty smart. Just create a javascript file (actually you can break it to as many files as you want) that will hold all your main objects. Below is a very basic “Greetings” object.
var Greetings = {
alertFn: function () {
alert("OK");
},
john: {
sayHelloToJohn: function () {
alert("Hello John!");
},
},
// do something else, etc.
};
At the example above the object “Greetings” contains two methods (functions). As you can see, I could go further and create nested objects with their own methods. The idea is to organize my methods as well as I can.
Then I only have to call them into our usual jQuery ready function like this.
$(document).ready(function () {
Greetings.alertFn();
});
// or
$(document).ready(function () {
Greetings.john.sayHelloToJohn();
});
Keep in mind that this way I can follow any code structure/organization I need, so for example I can follow my application’s controllers structure and naming convention, or whatever makes more sense for my app. This way we get a simple, more robust, well-organised jQuery code, and not the classic document ready soup…