1

考虑以下代码:http: //jsfiddle.net/nzzzH/

尝试在 Chrome、IE、Firefox 中点击 div 然后与 Opera 比较

你可以注意到,一开始所有的 <tr> 元素都被隐藏在一起了,但它是一个一个地被 Opera 隐藏起来的。

根据规格,哪种行为是正确的?怎么能强迫 Opera 像其他浏览器一样工作呢?

代码:

<div> click </div>

<table>
  <tr><td>a</td></tr>
  <tr><td>b</td></tr>
  <tr><td>c</td></tr>
  <tr><td>d</td></tr>
  <tr><td>e</td></tr>
</table>


var sleep = function (ms) {
    var unixtime_ms = new Date().getTime();
    while(new Date().getTime() < unixtime_ms + ms) {}
}

$('div').click(function(){
    $('tr').each(function(){
        $(this).hide();
        sleep(200);
    })
})
4

2 回答 2

0

因此,如果您只想隐藏行并将某些样式应用于可见行,为什么不一步隐藏它们呢?

$('div').click(function(){
    $('tr.rows-to-hide').hide();
    $('tr:not(.rows-to-hide)').css('background-color', 'blue');
});

编辑 我做了三个例子:

http://jsfiddle.net/nzzzH/8/ ->.hide()each()-loop

http://jsfiddle.net/nzzzH/10/ ->.hide()一次

http://jsfiddle.net/nzzzH/10/ ->.css('display', 'none')each()-loop

所以确实.hide()in each()-loop 的使用是迄今为止最慢的,不幸的是我无法找出这种行为的具体原因,我的猜测是歌剧在处理大量 jQuery 动画时具有性能。我的提示是立即使用.hide()

编辑 2 我认为我的猜测是正确的:为什么歌剧动画这么慢?

于 2013-02-20T12:58:33.870 回答
-1

尝试用 .css({'display':'none'}) 替换 .hide() :

$('div').click(function(){
    $('tr').each(function(){
        $(this).css({'display':'none'});
    })
})
于 2013-02-20T13:02:02.977 回答