Javascript 对于不区分大小写的jQuery:contains选择器,是否有任何方法可以加快此解决方案的速度?

Javascript 对于不区分大小写的jQuery:contains选择器,是否有任何方法可以加快此解决方案的速度?,javascript,jquery,jquery-selectors,Javascript,Jquery,Jquery Selectors,我在StackOverflow上找到了一个不区分大小写的jQuery:contains选择器。它工作得很好,但是它以性能为代价。有没有其他人觉得这个解决方案有点慢 我正在使用:contains选择器搜索表。用户在文本框中键入搜索字符串。对于每次击键,它都会在表中搜索该字符串,并通过:contains选择器仅显示包含该字符串的行。在实现不区分大小写的解决方案之前,此搜索非常快速。现在有了这个解决方案,它会在每次击键后锁定一小段时间 有没有关于如何加快解决方案的想法?您可以尝试在每次击键后不检查,但

我在StackOverflow上找到了一个不区分大小写的jQuery
:contains
选择器。它工作得很好,但是它以性能为代价。有没有其他人觉得这个解决方案有点慢

我正在使用
:contains
选择器搜索表。用户在文本框中键入搜索字符串。对于每次击键,它都会在表中搜索该字符串,并通过
:contains
选择器仅显示包含该字符串的行。在实现不区分大小写的解决方案之前,此搜索非常快速。现在有了这个解决方案,它会在每次击键后锁定一小段时间


有没有关于如何加快解决方案的想法?

您可以尝试在每次击键后不检查,但可能在最后一次击键后一秒钟检查。这样,您就不用在用户键入时不断检查,而是在用户完成或暂停键入时进行检查。

要补充jason所说的内容,您可以尝试使用来完成该操作。

在用户停止键入指定时间后,您可以尝试仅检查一次选择器,不是每次击键都是这样

例如,一个简单的实现:

var typewatch = function(){
    var timer = 0;  // store the timer id
    return function(callback, ms){
        clearTimeout (timer);  // if the function is called before the timeout
        timer = setTimeout(callback, ms); // clear the timer and start it over
    }  
}();
用法:

$("#textboxId").keyup(function () {
  typewatch(function () {
    // executed only 500 ms after the user stopped typing.
  }, 500);
实施:

var typewatch = function(){
    var timer = 0;  // store the timer id
    return function(callback, ms){
        clearTimeout (timer);  // if the function is called before the timeout
        timer = setTimeout(callback, ms); // clear the timer and start it over
    }  
}();

我在Google上找到了另一个不区分大小写的搜索解决方案(参见),它与我最初使用的略有不同

原件:

return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
埃里克森:

return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
比较两者,您可以看到Eric Phan的解决方案直接访问DOM属性,并使用
toLowerCase()
而不是
toUpperCase()
。后者并不重要,但前者真正提高了不区分大小写搜索的性能。只需将原始解决方案更改为使用
(a.textContent | | a.innerText | | | | |“”)
而不是
jQuery(a).text()
就完全不同了

现在我有点好奇了,下面是一个后续问题:
jQuery.text()
,这是怎么回事?为什么这么慢?我有我的假设,但我很想听听专家们怎么说

最后,感谢所有回应的人。我感谢你的帮助

下面是一个后续问题:什么是 处理jQuery.text()的过程?为什么 这么慢


我怀疑这是由于
$(a)
(将DOM元素转换为jQuery对象)而不是
.text()

造成的!我非常喜欢这个解决方案;简单有效。然而,在我最后一次击键之后,仍然有一个超过指定的延迟。我在Google上又看了一眼,发现不区分大小写的搜索的不同版本实际上与默认的区分大小写搜索的性能相匹配(见下面的答案)。尽管如此,我还是把你的解决方案放在我的后口袋里。我以后肯定需要这样的东西。=)这是一篇非常古老的帖子,可能根本与现实无关,但如果我不得不拿出我的时间机器。我猜对特定数据/DOM调用jquery会导致一个javascript异常,jquery在内部处理该异常。然而,您对多足支票的更改可能会短路,而不是引发需要捕获的异常。