Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我怎样才能使这个jQuery;“收缩文本”;功能更有效?用二进制搜索?_Javascript_Jquery - Fatal编程技术网

Javascript 我怎样才能使这个jQuery;“收缩文本”;功能更有效?用二进制搜索?

Javascript 我怎样才能使这个jQuery;“收缩文本”;功能更有效?用二进制搜索?,javascript,jquery,Javascript,Jquery,我构建了jQuery函数,该函数将文本字符串和宽度作为输入,然后收缩该文本,直到其不大于宽度,如下所示: function constrain(text, ideal_width){ var temp = $('.temp_item'); temp.html(text); var item_width = temp.width(); var ideal = parseInt(ideal_width); var smaller_text = text;

我构建了jQuery函数,该函数将文本字符串和宽度作为输入,然后收缩该文本,直到其不大于宽度,如下所示:

function constrain(text, ideal_width){
    var temp = $('.temp_item');
    temp.html(text);
    var item_width = temp.width();
    var ideal = parseInt(ideal_width);
    var smaller_text = text;
    var original = text.length;

    while (item_width > ideal) {
        smaller_text = smaller_text.substr(0, (smaller_text.length-1));
        temp.html(smaller_text);
        item_width = temp.width();
    }

    var final_length = smaller_text.length;
    if (final_length != original) {
        return (smaller_text + '…');
    } else {
        return text;
    }
}
这很好,但是因为我在很多文本上调用这个函数,除了Safari 4和Chrome之外的任何浏览器上,它都非常慢

我曾尝试使用二进制搜索方法来提高效率,但到目前为止,我的浏览器中出现了一个缓慢的脚本对话框:

function constrain(text, ideal_width){
    var temp = $('.temp_item');
    temp.html(text);
    var item_width = temp.width();
    var ideal = parseInt(ideal_width);

    var lower = 0;
    var original = text.length;
    var higher = text.length;

    while (item_width != ideal) {

        var mid = parseInt((lower + higher) / 2);
        var smaller_text = text.substr(0, mid);
        temp.html(smaller_text);
        item_width = temp.width();

        if (item_width > ideal) {

            // make smaller to the mean of "lower" and this
            higher = mid - 1;

        } else {

            // make larger to the mean of "higher" and this
            lower = mid + 1;

        }
    }

    var final_length = smaller_text.length;
    if (final_length != original) {
        return (smaller_text + '…');
    } else {
        return text;
    }
}
有没有人知道我应该做些什么来尽可能提高这个功能的效率


谢谢!Simon

脚本的问题可能是
条件
(item\u width!=理想)
可能永远不会中止循环。可能无法将输入文本修剪到精确的宽度
ideal
。在这种情况下,函数将永远循环,这将触发慢速脚本对话框

为了避免这种情况,如果显示的文本足够小,就应该停止循环(也就是说,添加更多字符会使其太大)。

我使用了2个div

<div class="englober">
<div class="title"></div>
</div>

你能描述一下你的目的吗?在我看来,将文本放在带有overflow:hidden的固定宽度块中会更容易。@Joel我之所以要这样做,是因为在溢出的文本中添加了省略号(…)。
while ($(".title").width() > $(".englober").width())
{
    var dFontsize = parseFloat($(".title").css("font-size"), 10);
    $(".title").css("font-size", dFontsize - 1);
}