2011-08-15 3 views
3

개체가 jQuery에서 .each()를 사용할 수있는 컬렉션인지 테스트하는 방법은 무엇입니까?개체가 jQuery에서 .each()를 받아 들일 수있는 컬렉션인지 테스트하는 방법은 무엇입니까?

미리 감사드립니다.

+0

내가 당신을 생각 :

if (!$.isEmptyObject(obj)) { $.each(obj, function(key, value){ ... }); } 

당신은 객체가 new Object() 또는 리터럴 { ... } 객체를 사용하여 생성 할 것인지를 결정하기 위하여 isPlainObject 방법을 사용할 수 있습니다 : 어떤 특성이 있는지 당신은 확인하기 위해 isEmptyObject을 사용할 수 있습니다 귀하의 질문을 명확히해야합니다. '.each()'를 호출하면 jQuery 객체에 대해서만 호출 할 수 있습니다. 즉, 콜렉션이 비어 있더라도 항상 호출 할 수 있습니다. 정말로'$ .each()'에 대해 묻고 있습니까? – user113716

답변

3

그냥 테스트 객체 each을 가지고, 또는 그것의 경우 object 경우 :

if (obj) { 
    if (typeof obj.each == 'function') { 
     obj.each(function(i,e) { ... }); 
    } else if (typeof obj == 'object') { 
     $.each(obj, function(i,e) { ... }); 
    } else { 
     //alert("not a valid collection"); 
    } 
} else { 
    //alert("obj is null"); 
} 

많은 어떤 요구, each 더 검증을 만들기 위해이 아니다 나머지는 다룰 것입니다.

+0

'if'가 좀 엉망입니다. obj.each를 진실성에 대해 테스트 할 필요는 없지만 obj를 역 참조하기 전에 테스트하는 것이 좋습니다. – Malvolio

+0

'} else if (obj.length) {''obj'가 함수라면? 함수도'.length' 속성을 가지고 있습니다. length (3)'obj'가 유효한 콜렉션이지만'.length'가'0'이면,'alert() '라는 말을 얻을 것입니다. (function (a, b, c) {}) 유효하지 않습니다. – user113716

+0

@patrick,'obj.length'가 0이면 true, 경고가 발생합니다. 대답을 수정하십시오 –

3

jQuery 객체 인 경우 요소가 없어도 항상 .each 메서드를 사용할 수 있습니다. jQuery 오브젝트가 비어 있으면 그냥 루프를 입력하지 않습니다, 그래서 빈의 jQuery 객체에 .each 전화 무해 :

obj.each(function(){ ... }); 

당신이 jQuery를 개체의 모든 항목이 있는지 확인하려면

, 당신이 할 수있는 length 속성을 사용하십시오.

당신은 루프 $.each을 사용할 수 있습니다 : 당신이 객체가 배열 인 경우는 $.each 방법으로 사용할 수 있도록 확인하려면

if (obj.length > 0) { 
    ... 
} 

, 당신은 $.isArray 방법을 사용할 수 있습니다 모든 객체의 속성.

if ($.isPlainObject(obj)) { 
    $.each(obj, function(key, value){ ... }); 
} 
관련 문제