0

我有一个包含各种输入的表格。其中一些输入最初是隐藏的,因为它们的父 div 带有display:None.

然后我通过 jQuery 删除隐藏的类。在我的电脑上,之前隐藏的 div 会瞬间出现。在 iPod Touch 上,它需要整整三秒钟。它有大约 100 个复选标记输入以及 CSS 格式。输入还附加到各种事件侦听器。再次隐藏除法同样慢(未显示此代码。)

有什么建议么?

CSS:

.hidden: {display:None}

html(简体):

<div id = "expand"></div>
<div class = "hidden" id = "city_div">
   some city <input type="checkbox">
   ...
</div>

脚本:

$("[id = expand]").live('click', function() {
    $("[id = city_div]").removeClass("hidden");
});

编辑:我最初写的是 iPhone,但它是一个 iPod Touch。更正了它。

4

2 回答 2

1

代替

$("[id = expand]").live('click', function() {
    $("[id = city_div]").removeClass("hidden");
});

$("#expand").live('click', function() {
    $("#city_div").removeClass("hidden");
});

它应该快得多。您的选择器正在寻找所有元素,而不是让 jQuery 简单地调用document.getElementById.

如果绑定处理程序时存在#expand 元素,请使用

$("#expand").on('click', function() {
    $("#city_div").removeClass("hidden");
});

顺便说一句,一定要使用最新版本的 jQuery。


编辑:如果您似乎有多个具有给定 id 的元素,请更改它!它是无效的,会导致错误并阻止优化。使用类,$('.classname')因为它让 jQuery 使用本机和快速getElementsByClassName功能。

于 2013-03-03T12:42:37.790 回答
0

我想知道这样访问隐藏的父级是否会提高性能?

$(".your-new-class").live('click', function() {
    $(this).parent().removeClass("hidden");
});

这假设隐藏项是可点击子项的直接父项。

于 2013-03-04T09:12:18.630 回答