2

500 個の<p>要素があり、それぞれに約 500 個の<span>要素があり、css が不透明度 1 に設定されています。

I の場合$('p').css( 'opacity', .5 )、すべてが瞬時に更新されます。

I$('p span').css( 'opacity', .5 )の場合、更新に数秒かかります。明らかに。すべての要素を繰り返し処理しています。

<span>私の質問は次のとおりです。さまざまな要素の任意の要素セットが与えられた場合、それらのスパン以外のすべてを不透明度 .5 に変更する<p>良い方法はありますか?

私はしないようにしました。 $('p').not( $('p span').slice( 5, 600) ).css( 'opacity', .5 )動作しません-おそらく、親から子を削除するために集合代数を実行しているためです。私はそれが暗黙のうちに機能することを望んでいました。ああ。

この種の問題を解決する良い方法はありますか? ここにフィドルがあります。

$('p span').not( $('p span').slice( 5, 600) ).css( 'opacity', .5 )動作します...しかし遅いです:-/

4

3 に答える 3

0

jQueryの後に直接メソッドを呼び出すことができますslice:

http://jsfiddle.net/CNU62/10/

$('p span').slice(5, 600).css('opacity', .75);

編集:

2 つのステップを実行しても構わない場合:

http://jsfiddle.net/CNU62/13/

$('p span').slice(10, 20).addClass('filterOut');
$('span').not('.filterOut').css('opacity', .75);

基本的に、スライスしたスパンに特別なクラスを追加し、クラスで s をnot取り出してから実行しますspancss()

于 2012-08-23T03:46:02.737 に答える
0

これが非常に多くの要素でうまく機能するとは約束できませんが、これを行うことができます:

$("p > *").not("span").css("opacity", 0.5);

<p>これにより、タグのすべての子オブジェクトが取得さ<span>れ、不透明度を適用する前にそのコレクションから要素が削除されます。そのため、タグ内の要素のみ<span>が影響を受けません。<p>

参考までに、パフォーマンスを向上させる必要がある場合は、ツリーを直接歩くと、おそらくこれよりも何倍も高速になります。直接の JS コードが、セレクター操作で実行できるものよりもはるかに高速になる場所がいくつかあります。

于 2012-08-23T04:11:49.550 に答える
0

これが私の試みです...まだかなり遅いです。

http://jsfiddle.net/V62wp/5/

var specialSpans = $('p span').slice(5, 105);
$('p').not(specialSpans.parent()).css('opacity', .5);
specialSpans.siblings().not( specialSpans ).css( 'opacity', .5 );

これにより、速度がわずかに向上します(このフィドルを参照):

var specialSpans = $('p span').slice(5, 105);
var specialParent = specialSpans.parent();
$('p').not(specialParent).css('opacity', .5);
specialParent.children().not(specialSpans).css('opacity', .5);
于 2012-08-23T04:31:08.867 に答える