2

我有 500 个<p>元素,每个元素都有大约 500 个<span>元素,它们的 css 设置为不透明度 1。

如果我$('p').css( 'opacity', .5 ),一切都会在瞬间更新。

如果 I $('p span').css( 'opacity', .5 ),更新需要几秒钟。明显地。它正在迭代每个元素。

<span>我的问题是:给定不同元素中的任意一组<p>元素,是否有一种好方法可以使除这些跨度更改为不透明度 0.5 之外的所有内容?

我试过没有$('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);

编辑:

如果你不介意做两个步骤:

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 );

这会稍微提高速度(请参阅this fiddle):

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 回答