2009-12-18 3 views
0

Ceci est mon premier plugin jQuery. Puis-je avoir des conseils? Il est actuellement ne fonctionne pas ...Premier plugin jQuery: TagCloud

; (function($) { 

$.fn.tagCloud = function(options) { 
     options = options || {}; 

    var maxPercent = options['maxPercent'] || 150; 
    var minPercent = options['minPercent'] || 100; 
    var retrieveCount = options['retrieveCount'] || function(element) { return $(element).attr('rel'); }; 
    var apply = options['apply'] || function(element, size) { $(element).attr('style', 'font-size:' + size + '%;'); }; 

    var max = null; 
    var min = null; 

    var tagElements = this; 

    tagElements.each(function(element) { 
     count = retrieveCount(element); 
     max = (max == null || count > max ? count : max); 
     min = (min == null || min > count ? count : min); 
    }); 

    var multiplier = (maxPercent - minPercent)/(max - min); 

    tagElements.each(function(element) { 
     count = retrieveCount(count); 
     size = (minPercent + (count - min) * multiplier); 
     apply(element, size); 
    }); 
} 
})(jQuery); 

Utilisation: $('a.tag').tagCloud();

+0

Pointeurs sur quoi? –

+0

Est-ce que je le fais correctement? –

+0

Et ça ne marche pas ... –

Répondre

1

faire usage d'un ensemble statique par défaut au lieu de les dur de codage. de cette façon, un utilisateur peut les remplacer withough havingto les mettre dans l'appel par exemple:

$.fn.tagCloud.defaults = { 
    maxPercent: 150, 
    minPercent: 100, 
    countCallback: function(element){return $(element).attr('rel');}, 
    applyCallback: function(element, size) { $(element).attr('style', 'font-size:' + size + '%;');} 
}; 

Et puis au début de votre plugin vous devez remplacer beaucoup de ces déclarations var avec un simple:

var o = $.extend($.fn.tagCloud.defaults, options||{}); 

alors vous auriez accès à tout avec o.* ou o['*'] id également rendre certains de vous logique dans des méthodes encapsulées .. Je veux généralement seulement/attendez de voir un bloc this.each() pour la logique primaire.

Aussi en aparté je crois que si votre sélecteur n'a pas d'éléments dans sa collection, vous allez diviser par 0 ou NaN qui est généralement un non-non. Si im correcte, vous voudrez peut-être par défaut min/max à 1 ou faire une vérification simple pour vous assurer que la longueur de la collection est> 0 et renflouer si elle ne dépend pas de ce que vous voulez faire.

0

I figured it out:

; (function($) { 

$.fn.tagCloud = function(options) { 
    options = options || {}; 

    var maxPercent = options['maxPercent'] || 150; 
    var minPercent = options['minPercent'] || 100; 
    var retrieveCount = options['retrieveCount'] || function(element) { return $(element).attr('rel'); }; 
    var apply = options['apply'] || function(element, size) { $(element).attr('style', 'font-size:' + size + '%;'); }; 

    var max = null; 
    var min = null; 

    var tagElements = this; 

    tagElements.each(function(index) { 
     var count = retrieveCount(this); 
     max = (max == null || count > max ? count : max); 
     min = (min == null || min > count ? count : min); 
    }); 

    var multiplier = (maxPercent - minPercent)/(max - min); 

    tagElements.each(function(index) { 
     var count = retrieveCount(this); 
     size = (minPercent + (count - min) * multiplier); 
     apply(this, size); 
    }); 
} 
})(jQuery);