Поскольку вы хотите обрабатывать каждый элемент независимо, вы можете сделать это в своем плагине, выполнив цикл .each()
вместо этого:
$.fn.textfill = function(options) {
var fontSize = options.maxFontPixels;
var ourText = $('span', this);
var maxHeight = $(this).height();
var maxWidth = $(this).width();
var textHeight;
var textWidth;
do {
ourText.css('font-size', fontSize);
textHeight = ourText.height();
textWidth = ourText.width();
fontSize = fontSize - 1;
} while (textHeight > maxHeight || textWidth > maxWidth && fontSize > 3);
return this;
}
быть таким:
$.fn.textfill = function(options) {
return this.each(function() {
var fontSize = options.maxFontPixels;
var ourText = $('span', this);
var maxHeight = $(this).height();
var maxWidth = $(this).width();
var textHeight;
var textWidth;
do {
ourText.css('font-size', fontSize);
textHeight = ourText.height();
textWidth = ourText.width();
fontSize = fontSize - 1;
} while (textHeight > maxHeight || textWidth > maxWidth && fontSize > 3);
});
};
Вы можете проверить это здесь
В качестве отступления от старого метода ... this
ужеОбъект jQuery внутри плагина (обратите внимание, как я вызываю .each()
непосредственно на нем), нет необходимости заключать его в другой объект jQuery (клонировать его).Вам do нужно обернуть его во втором примере внутри цикла, поскольку внутри .each()
вы имеете в виду отдельные элементы DOM, а не объекты jQuery.