Je suis en train de créer une fonction jQuery qui prendra une chaîne et une largeur fixe en entrée, puis à travers une méthode de recherche binaire (pour l'efficacité) « rétrécir » ce morceau de texte il est donc plus que la largeur fixe.Comment puis-je créer une fonction jQuery qui réduit une chaîne à l'aide d'une méthode de recherche binaire?
C'est ce que j'ai jusqu'à présent:
function constrain(text, ideal_width){
var temp = $('.temp_item');
temp.html(text);
var item_width = temp.width();
var ideal = parseInt(ideal_width);
var text_len_lower = 0;
var smaller_text = text;
var text_len_higher = text.length;
while (true) {
if (item_width > ideal) {
// make smaller to the mean of "lower" and this
text_len_higher = smaller_text.length;
smaller_text = text.substr(0, ((text_len_higher + text_len_lower)/2));
} else {
if (smaller_text.length >= text_len_higher) break;
// make larger to the mean of "higher" and this
text_len_lower = smaller_text.length;
smaller_text = text.substr(0, ((smaller_text.length + text_len_higher)/2));
}
temp.html(smaller_text);
item_width = temp.width();
}
var new_text = smaller_text + '…'
return new_text;
}
Malheureusement, cela provoque un « script lent » qui ne se termine jamais dans mon navigateur. Firebug pointe sur la ligne 1131 de jquery.js (version 1.3.2), qui est l'utilitaire jQuery "unique". Je n'utilise pas "unique" partout cependant.
Qu'est-ce que je fais mal ici?
Mec, Rich B, ce que l'enfer est avec les modifications étranges? L'édition n'est pas destinée à changer "J'ai" en "J'ai" et autres joyeusetés. – ceejayoz
@cee: Et rouler en arrière n'est pas destiné à résoudre les problèmes que vous pourriez avoir avec moi. Si vous voyez un montage abusif, par tous les moyens le signaler aux mods. Sinon, occupez-vous de vos propres affaires. – GEOCHET
@ceejayoz - L'édition de Rich en a fait une question. C'est une bonne chose. Je lui donnerais +1 si je le pouvais. –