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 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;
}

不幸的是,这会导致在我的浏览器中永远无法完成的“慢脚本”。 Firebug 指出 jquery.js(版本 1.3.2)的第 1131 行是罪魁祸首,它是“独特”的 jQuery 实用程序。然而,我没有在任何地方使用“独特”。

我在这里做错了什么?

最佳答案

你能连接一个 javascript 调试器并检查它崩溃的地方吗?将 Firebug 与 Firefox 一起使用,或将 MSVS 与 IE 一起使用。如果它爆炸得太厉害以至于调试器死了,请单步执行该函数,看看它能走多远。

根据最后的评论更新:我认为您需要单步执行您的代码,看看它能走多远。我会怀疑一些事情:

  1. 可能对象的宽度在设置新的内部文本后还没有重新计算(或者已经无效)。可能是更新后的宽度直到稍后 UI 重新调整时才可用。

  2. 理论上这个循环应该总是终止,但它有可能(特别是如果浏览器没有正确地重新计算宽度)循环可能会永远持续下去。

  3. 您可能在拆分内部文本时拆分了 HTML 标记,导致您的代码插入格式错误的 HTML,可能导致页面布局中断。

关于javascript - 如何制作一个使用二进制搜索方法收缩字符串的 jQuery 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/917679/

相关文章:

javascript - 尝试从 algodClient.compile(sig) 获取 LogicSigAccount

javascript - TideSDK强制下载文件

javascript - 消息容器宽度 CSS 问题

javascript - 如何选择函数名?

javascript - React Router 不会根据状态重定向

javascript - 传递另一个 div id 时显示/隐藏 div id

javascript - 即使刷新页面后如何存储禁用按钮的状态?

jquery 填充单选按钮的 json 数据

javascript - 从 jQuery 下拉列表中访问变量

javascript - Array.filter() 删除重复对象