Guideline JS
Sugestões de boas práticas para o uso de javaScript e jQuery.
Sugestões de boas práticas para o uso de javaScript e jQuery.
Usar javascript puto requer um alto conhecimento da linguagem e de seus conceitos funcionais e de compatibilidade. Dito isso é sempre recomendável o uso prioritário do jQuery para facilitar a leitura e utilizaçãos dos recursos da linguagem. Lembrando que na maioria das vezes o jQuery resolve nossos problemas de compatibilidade dos navegadores.
Sempre utilize seletores em cache.
//Evite:
var offset = $('.my-class').offset();
var height = $('.my-class').outerHeight();
var width = $('.my-class').outerWidth();
//Prefira:
var target = $('.my-class'),
offset = target.offset(),
height = target.outerHeight(),
width = target.outerWidth();
Mais de um evento em um mesmo elemento, evite a repetição de código.
//Evite:
$("#longlist li").on("mouseenter", function() {
$(this).text("Click me!");
});
$("#longlist li").on("click", function() {
$(this).text("Why did you click me?!");
});
//Prefira:
var listItems = $("#longlist li");
listItems.on({
"mouseenter": function() {
$(this).text("Click me!");
},
"click": function() {
$(this).text("Why did you click me?!");
}
});
Ao dividir uma cadeia em várias linhas é preferível colocar o .
no inicio.
this.someElement()
.removeClass('invisible')
.find('.placeholder').text('new placeholder');
Ao utilizar ajax tenha preferencia na utilização das chamadas abreviadas pois são mais versobsas.
//Evite:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});
//Prefira:
$.get( "url", function( data ) {
$( ".result" ).html( data );
})
.done(function() {
alert( "second success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "finished" );
});
// ou
$.post( "url", function( data ) {
$( ".result" ).html( data );
})
.done(function() {
alert( "second success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "finished" );
});
Cuidado ao utilizar eventos em elemento que vão sofrer re inserção no DOM, pois tais elementos vão perder todos os eventos de js atrelados ao mesmo. EX: Elementos que vão ser renderizados novamente em retornos ajax. Antigamente usavamos o live do jQuery para fazer a re indexação dos eventos, porém esse método foi descontinuado. Agora usamos uma variação do jQuery.on.
//Prefira:
$( "#dataTable tbody" ).on( "click", "tr", function() {
console.log( $( this ).text() );
});
//Pois se usar da forma listada abaixo o evento será perdido caso as tr's sejam renderizadas novamente
$( "#dataTable tbody tr" ).on( "click", function() {
console.log( $( this ).text() );
});