Is there any way to speed up this solution for a case-insensitive jQuery :contains selector?

前端 未结 5 1085
萌比男神i
萌比男神i 2021-02-09 14:11

I found this solution for a case-insensitive jQuery :contains selector on StackOverflow. It works great, however it comes at the cost of performance. Does anyone el

5条回答
  •  说谎
    说谎 (楼主)
    2021-02-09 14:34

    I found another solution of the case-insensitive search on Google (see Eric Phan) which varies slightly from the one I was originally using.

    Original:

    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
    

    EricPhan:

    return (a.textContent || a.innerText || "").toLowerCase().indexOf(m[3].toLowerCase())>=0;
    

    Comparing the two, you can see Eric Phan's solution accesses the DOM attributes directly and uses toLowerCase() instead of toUpperCase(). The latter doesn't really matter, but the former is what really improved the performance of the case-insensitive search. Just changing the original solution to use (a.textContent || a.innerText || "") instead of jQuery(a).text() made all the difference!

    Now I'm a bit curious, so here's a follow up question: What's the deal with jQuery.text()? Why's it so slow? I have my assumptions, but I'd love to hear what the experts have to say.

    Lastly, thanks to everyone who responded. I appreicate your help. =)

提交回复
热议问题