2009-09-16 4 views
1

jquery 객체 컬렉션을 구성하는이 Jquery 코드가 있습니다. 실행에는 약 600ms가 걸립니다. 나는 그것을 최적화하려는 : 최적화 : jquery 컬렉션 구성

var tousBt = $('img.boutonReduire'); 
var stack = $(''); 
tousBt.each(function() { 
    var id = $(this).attr('id'); 
    stack = stack.add('#table' + id).add('#img' + id); 
    }); 

당신이 내가 할 수있는 것을 볼 수 있습니까? 결과는 jquery 객체의 컬렉션이어야합니다.

편집 : 모든 스택 요소를 가져 와서 숨 깁니다. stack.addClass ('hideit'); 약 125 개의 요소가 있습니다. 그리고 $ ('*') 길이는 약 7100 개의 요소를 제공합니다.

+1

'tousBt' 무엇입니까? –

+0

는 tousBt를 표시하는 코드를 수정했습니다 –

+0

그리고'id' 속성의 값은 무엇입니까? 아니면 실제로 stack을 사용하여 앞으로 무엇을 할 것인가? 문제가 더 잘 풀릴 수있는 몇 가지 jQuery 마법이있다.) –

답변

3

먼저, 반복 기능 내에서 할당 작업을 제거하십시오. stack는 재 할당 할 필요가 없습니다 --- 인스턴스 :

var tousBt = $('img.boutonReduire'); 
var stack = $(''); 
tousBt.each(function() { 
    var id = $(this).attr('id'); 
    stack.add('#table' + id).add('#img' + id); 
}); 

나는 또한 당신이 시간의 add() 톤을 호출하는 경우 jQuery를 오버 헤드에서 멀리 점점 좋을 것. 여기에 선택기 축적하는 경량의 배열을 사용하여 버전입니다 :

var selector = stack.join(','); 
//$(stack.join(',')); 

편집 : 다음

var tousBt = $('img.boutonReduire'); 
var stack = []; 
tousBt.each(function() { 
    var id = this.id; 
    stack.push('#table' + id); 
    stack.push('#img' + id); 
}); 

, 당신은 jQuery를 함께 사용할 수있는 최종 선택 얻을이 절대적으로 지체 보일 수를, 그러나이 실제로는 (적어도 가치가 샷) 빠른 될 수 있습니다

var tousBt = $('img.boutonReduire'); 
tousBt.each(function() { 
    var id = this.id; 
    $('#table' + id).addClass('selected'); 
    $('#img' + id).addClass('selected'); 
}); 
var stack = $('.selected'); 
+1

이것을 "var id = $ (this) .attr ('id');"라고 생각하십시오. "var id = this.id"로 바꿀 수 있습니다. – Kamarey

+0

Doh, 좋은 지적입니다. 편집 됨. – brianreavis

+0

정말 좋은 생각입니다. 이렇게하면 Jquery 활용도가 최소화됩니다. 하지만 제 경우에는 도움이되지 않습니다. Jquery 객체 만 생성하려면 2000 밀리 초가 필요합니다. 참고 : 결과 스택 목록에는 125 개의 요소가 있습니다. 나는 결과에 놀랐다. –