javascript - 如何限制或限制此函数调用中的函数调用次数(以提高性能)?

标签 javascript jquery keyboard-events

我有一个看起来像这样的函数:

function someFunction(text) {
    $('.class').each(function() {
        var $this = $(this);
        if ($this.text().match(text)) {
           $this.addClass('found');
        } else {
           $this.removeClass('found');
        }
    });
}

并且该函数在 keyup 事件中执行,

$('input[type=text]').keyup(function() {
   someFunction($(this).val());
});

在 IE 上,如果有很多 .class 元素,它可能会很慢,我认为如果我停止执行 each 调用,如果函数在 each 调用之前再次执行,我可以加快速度完成的。我该怎么做?

最佳答案

您可以通过向 keyup 处理程序添加轻微的延迟来加快此过程,这样 DOM 仅在键入结束后而不是每次击键时受到影响。您还可以使用 :contains 选择器来查找元素。试试这个:

function someFunction(text) {
    $('.class').removeClass('found').filter(':contains("' + text + '")').addClass('found');
}

var timer;
$('input[type=text]').keyup(function() {
    clearTimeout(timer);
    timer = setTimeout(function() {
        someFunction(this.value);
    }, 100);
});

此外,正如@A.Wolff 所提到的,您可以缓存 .class 选择器,但这只有在没有 .class 元素动态添加到 DOM 时才有效在您搜索时:

var $elements = $('.class');
function someFunction(text) {
    $elements.removeClass('found').filter(':contains("' + text + '")').addClass('found');
}

var timer;
$('input[type=text]').keyup(function() {
    clearTimeout(timer);
    timer = setTimeout(function() {
        someFunction(this.value);
    }, 100);
});

关于javascript - 如何限制或限制此函数调用中的函数调用次数(以提高性能)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35265375/

相关文章:

java - 为什么这个 *jquery.dataTables.js* 示例不起作用?

javascript - 较大的 Bootstrap 传送带内的较小的 Bootstrap 传送带 - 较小的 Bootstrap 传送带旋转的功能问题

javascript - 如何使用自定义键盘事件和 keyCode 更改输入/文本区域值?

javascript - 正则表达式字边界(退格)测试用例

javascript - 排序数组忽略特殊字符和整数?

javascript - Node js在HTTP请求中接收文件

javascript - 使用 Javascript 将 url 插入 Django 模板

javascript - 在 CHROME 中使用 Javascript/jQuery/CSS 降低图像饱和度

javascript - 单击时展开 Div 类的宽度

qt - 使用 Qt 时将键盘输入定向到小部件