【问题标题】:This jQuery selector is very slow. Why?这个 jQuery 选择器非常慢。为什么?
【发布时间】:2011-04-19 17:28:17
【问题描述】:

我通过传入一些 HTML 字符串来创建一个简单的 jQuery 对象。但是在 IE7 中,警报告诉我它需要大约 125 毫秒。

var timeStart = new Date();
var allTabs = jQuery(tmbJsContent);

var timeEnd = new Date();
alert(timeEnd-timeStart);

tmbJsContent 包含 10 个 div 的 html,其中包含表格。我理解它有点长,但是因为没有 DOM 被操作,并且只创建了一个 jQuery 对象。什么能花这么长时间?我怎样才能让它更快?

谢谢

【问题讨论】:

  • 您没有发现有必要发布tmbJsContent 变量的值?
  • @Darin - 你的外交技巧... :)
  • 你为什么用IE7? :P 它是每个人都跳过的混蛋浏览器...
  • 告诉用户停止使用 IE7 是让你的脚本运行得更快的唯一方法。

标签: javascript jquery jquery-selectors css-selectors


【解决方案1】:

创建一个容器元素并更新其innerHTML 内容

var container = document.createElement("div");
container.innerHTML = tmbJsContent;

大约需要一毫秒:)

【讨论】:

  • 怎么来的?这是标准的 javascript,应该可以在任何地方工作,IE6 中的事件。 document.createElement 是一种标准的 DOM 方法,innerHTML 是由 IE发明的。
  • 因为 IE6 不支持对 innerHTML 的操作 ;( 朋友不要误会,你的回答很完美,浏览器是有缺陷的。
  • 你确定你不是在谈论 IE4 吗? innerHTML(和outerHTML)是微软发明的,从 Internet Explorer 5 开始就出现了。
  • 嘿安德里斯,我实际上刚刚验证。只要您不在桌子上使用innerHTML,IE6 中就可以接受。忽略我的评论 :P 但是如果你想看看效果,试试看,只是尝试操纵表格单元格的 innerHtml 或其他东西。有点奇怪,它不起作用!
  • 是的,我同意这一点,无论有没有innerHMTL,在 IE6 中管理表格都是一个真正的痛苦:)
【解决方案2】:

要真正回答这个问题,我们需要看看 tmbJsContent 的价值...

与此同时,如果您的选择器运行缓慢,请尝试通过传入容器(作为上下文)来限制选择器的“搜索区域”。

示例:

var context = jQuery('#SomeContainer');
var target = jQuery('MySelector', context);

这将选择器搜索限制为传入的容器。

【讨论】:

    猜你喜欢
    • 2011-01-18
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2013-07-31
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多