This post pick up on my previous post "Efficient and Helpful JavaScript/jQuery Tips and Tricks"
and provides additional nice to know tips for jQuery developers. jQuery
is popular for a reason and widely used by nearly everyone from huge
companies to bloggers. Even though jQuery is so simple to use and get
started with there are great features provided to us that a lot of
people is not aware of. I guess that the vast majority of jQuery users
tend to look for plugins that solve the challenges at hand and it is
often the right strategy. But when it fails it is nice to know that you
may be able to do it yourself. Learn the tricks and see where it takes
you!
#1 Test and improve you jQuery selector skills
This jQuery selector Lab
is really cool and can be used free online and you can even download
the lab and use it off-line. There's a test page with most of the
combination of html fields you can imagine and then a very long list of
predefined selectors you can try. If that is not enough you can also
type in your own selectors.
#2 Test if a jQuery collection contains any elements
If you need to test if a jQuery collection contains any elements you can simply try accessing the first element like this:
if($(selector)[0]){...}
// or you may use
if($(selector).length){...}
Let look at an example:
//ex. if you have this html on a page
<ul id="shopping_cart_items">
<li><input class="in_stock" name="item" type="radio" value="Item-X" />Item X</li>
<li><input class="unknown" name="item" type="radio" value="Item-Y" />Item Y</li>
<li><input class="in_stock" name="item" type="radio" value="Item-Z" />Item Z</li>
</ul>
<pre escaped="true" lang="javascript">...
//The condition in this if statement will evaluate to true because we have two
// input fields that match the selector and the <statement> will be executed
if($('#shopping_cart_items input.in_stock')[0]){<statement>}
#3 Loading latest jQuery version from jquery.org
You can actually load the latest jQuery version using this code:
<script src="http://code.jquery.com/jquery-latest.js"></script>
This is handy if you quickly want to try out an idea for a script
with the latest version. As you may know you can also load jQuery from
ajax.googleapis.com as shown in #1 - Load the framework from Google
Code.
#4 Use Callback to synchronize Effects
If you want to ensure that events occur one after the other you
should use callbacks. Functions allow us to register a callback once
the operation is over like this: slideDown( speed, [callback] ) ie.
$('#sliding').slideDown('slow', function(){....
<style>
div.button { background:#cfd; margin:3px; width:50px;
text-align:center; float:left; cursor:pointer;
border:2px outset black; font-weight:bolder; }
#sliding { display:none; }
</style>
<script>
$(document).ready(function(){
// Use jQuery to change look of div once clicked and the event to
//start off the slide effect
$("div.button").click(function () {
//div.button will now look like a pushed down button
$(this).css({ borderStyle:"inset", cursor:"wait" });
//The hidden #sliding will now slide down and use callback to start the
//slideup once it completes
$('#sliding').slideDown('slow', function(){
$('#sliding').slideUp('slow', function(){
//once the slide up is over the callback change css for button back
$('div.button').css({ borderStyle:"outset", cursor:"auto" });
});
});
});
});
</script>
#5 Use Events to control DOM Elements and Custom Objects
One of the most useful parts of jQuery is it's ability to attach
events to objects within a web page. When these events are triggered
you can then use a custom function to do pretty much whatever you want
with the event.There is a wide range of Events
that are supported by jQuery and you will be able to create your own as
well. Binding events to page elements doesn't get much easier and
elegant here a few examples.
//Bind click event to a paragraph and write click coordinates to the page
$("p").bind("click", function(e){
var str = "( " + e.pageX + ", " + e.pageY + " )";
$("span").text("Click at coordinates: " + str);
});
//Binding multiple events is also simple and
$("p").bind("mouseenter mouseleave", function(e){
//toggleClass adds the specified class if it is not present, removes
//the specified class if it is present.
$(this).toggleClass("mouse-over");
});
Not only can you bind events to DOM elements as simple as just
illustrated. With jQuery you can actually bind a custom event to ANY
object. Here is an example.
}
function shoppingCart() {
// Do general shopping cart stuff here...
};
var myShoppingCart = new shoppingCart('personalShoppingCart');
jQuery(myShoppingCart).bind('addItem', function() {
// Custom event handling for adding items to the shopping cart...
});
// Trigger custom event:
jQuery(myShoppingCart).trigger('addItem');
);
#6 Learn to use Custom Selectors
On top of standard CSS selectors jQuery allow you to define custom selectors that makes your code even more simple.
$.expr[':'].mycustomselector= function(element, index, meta, stack){
// element- is a DOM element
// index - the current loop index in stack
// meta - meta data about your selector
// stack - stack of all elements to loop
// Return true to include current element
// Return false to explude current element
};
// Custom Selector usage:
$('.someClasses:test').doSomething();
Lets take a look at an example. This custom selector will return elements in the scope specified with attribute "rel":
$.expr[':'].withRel = function(element){
var $this = $(element);
//simply returning elements where rel is not empty
return ($this.attr('rel') != '');
};
$(document).ready(function(){
//Using the custom selector is simple and the collection returned support chaining
// as illustrated here to apply some css to the returned elements
$('a:withRel').css('background-color', 'green');
});
...
<ul>
<li>
<a href="#">without rel</a>
</li>
<li>
<a rel="somerel" href="#">with rel</a>
</li>
<li>
<a rel="" href="#">without rel</a>
</li>
<li>
<a rel="nofollow" href="#">a link with rel</a>
</li>
</ul>
#7 Make entire Elements click-able
A lot of menus are created using simple <li> lists and css. It
would be nice for the website usability if navigation was provided for
the entire <li> and not just for the link text. jQuery makes this
possible in a pretty simple way by taking the href (url) from the
embedded link.
<ul>
<li><a href="home">home</a></li>
<li><a href="home">about</a></li>
<li><a href="home">contact</a></li>
</ul>
...
//selector select all li within the ul and then we make them clickable.
$("ul li").click(function(){
//get the url from href attribute and launch the url
window.location=$(this).find("a").attr("href"); return false;
});
#8 Preloading images
Generally it is a good idea to preload images if they are used in javescripts.
<pre>//Define function that preloads a defined list
//of images (arguments for the function).
jQuery.preloadImages = function(){
/Loop through the images
for(var i = 0; i<arguments.length; i++){
jQuery("<img>").attr("src", arguments[i]);
}
}
// You can use usage the script this way:
$.preloadImages("images/logo.png", "images/logo-face.png", "images/mission.png");
#9 Disable right-click contextual menu
As with other things we have been doing for years using javascript jQuery makes it simpler and more elegant.
Of cause you can use this for much more. You may do something when the contextmenu event is fired.
<pre>
<pre>$(document).ready(function(){
$(document).bind("contextmenu",function(e){
return false;
});
})
#10 Make code simpler using group queries
A useful way to make the code simpler and easier to read is by grouping the queries for elements that need the same treatment.
// Don't do it like this as it takes up unnecessary space and takes time to write
$('div.close').click(doSomething);
$('button.close').click(doSomething);
$('input.close').click(doSomething);
// Simply use group queries in the selector if you have to
//apply same operation to them all
$('div.close, button.close, input.close')
.click(doSomething);
11. Test your code well
jQuery comes with a unit test framework called QUnit.
Writing tests is quite easy and allow you to confidently modify your
code while ensuring that it still works as expected. Here is how it
works:
<pre>//Separate tests into modules.
module("Module B");
test("some other test", function() {
//Specify how many assertions are expected to run within a test.
expect(2);
//A comparison assertion, equivalent to JUnit's assertEquals.
equals( true, false, "failing test" );
equals( true, true, "passing test" );
});
|
Language
Recent articles How to open a car sharing service Vue developer as a vital part of every software team Vue.js developers: hire them, use them and get ahead of the competition 3 Reasons Why Java is so Popular Migrate to Angular: why and how you should do it The Possible Working Methods of Python Ideology JavaScript Research Paper: 6 Writing Tips to Craft a Masterpiece Learning How to Make Use of New Marketing Trends 5 Important Elements of an E-commerce Website How To Create A Successful Prototype For Your PCB
Top view articles Top 10 Beautiful Christmas Countdown Timers Adding JavaScript to WordPress Effectively with JavaScript Localization feature 65 Free JavaScript Photo Gallery Solutions 16 Free Code Syntax Highlighters by Javascript For Better Programming Best Free Linux Web Programming Editors Top 10 Best JavaScript eBooks that Beginners should Learn Top 50 Most Addictive and Popular Facebook mini games More 30 Excellent JavaScript/AJAX based Photo Galleries to Boost your Sites Top 10 Free Web Chat box Plug-ins and Add-ons The Ultimate JavaScript Tutorial in Web Design
|