包含 if 和 .each() 的 jQuery 函数在 IE7 中非常慢

标签 jquery internet-explorer each

我基本上搜索具有特定数据属性的元素,因此我循环遍历具有可能具有这些数据属性的类的所有元素。我使用 jQueryeach() 函数进行循环,并且已经阅读并体验到,与其他常见浏览器(如 Firefox、Chrome 或 Safari)相比,它在 IE7 或任何其他 IE 中通常相当慢。

也许有更好的方法来查找这些元素?!

$('body').on('mouseenter', '.course', function(){
        var startday = $(this).data('start');
        var endday = $(this).data('end');
        var coursemonth = $(this).data('month');

        $('.dayname').each(function() {
            var thisday = $(this).data('date');
            var thismonth = $(this).data('month');

            if(thisday >= startday && thisday <= endday && thismonth == coursemonth)
            {
                $(this).addClass('red');
            }
        })
});

我使用 .each() 循环的上下文是一个天数列表,实际上只是所有 30 天或一个月中的天数,最多 6 个月。每天都包含格式为“mmdd”的日期以及作为数据属性的月份。

            <div class="dayname we" data-date="0401" data-month="04">So</div>
            <div class="dayname " data-date="0402" data-month="04">Mo</div>
            <div class="dayname " data-date="0403" data-month="04">Di</div>
            <div class="dayname " data-date="0404" data-month="04">Mi</div>
            <div class="dayname " data-date="0405" data-month="04">Do</div>

更新:不幸的是,所有提高选择器和元素性能的技巧和提示都失败了。但我仍然希望能够让它发挥作用。我真的没有一个正确的想法,但我不知怎的感觉可能有一种方法像 find() 和一个选择器能够区分更高和更低的数字(正如你在标记中看到的那样) )我的数据属性只是数字。 有没有办法在选择器中进行比较?这样我就可以省略 .each() 并希望能够解决性能问题。

最佳答案

您可以通过减少对 data 方法的调用次数以及创建 this 元素的 jQuery 对象实例来优化代码,以帮助提高性能。

var $dayName = $('.dayname');
$('body').on('mouseenter', '.course', function(){
        var dataObj = $(this).data();

        $dayName.each(function() {
            var $this = $(this);
            var innerDataObj = $this.data();

            if(innerDataObj.date >= dataObj.start 
               && innerDataObj.date <= dataObj.end 
               && innerDataObj.month == dataObj.month)
            {
                $this.addClass('red');
            }
        })
});

关于包含 if 和 .each() 的 jQuery 函数在 IE7 中非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8900561/

相关文章:

jquery - 如何强制 jQuery Validation 在每次调用时重新验证整个表单?

javascript - IE 中 "Enable native XMLHTTP support"选项的用途是什么

javascript - 使用javascript可靠地检测IE8

javascript - JQuery:悬停功能,如何添加延迟

javascript - ajax和tweenmax的结合

ruby - 为什么我可以将子数组传递给 `Array#each` ?

javascript - Jquery .each延迟问题

javascript - 未捕获的类型错误 : Object [object Window] has no method 'each' function

javascript - 如何使用 v3 API 和 JQuery 将事件添加到 Google 日历?

CSS3 翻转在 Internet Explorer 中不起作用