jQuery에 대한 "존재"기능이 있습니까?


질문

 

jQuery에서 요소의 존재를 확인할 수 있습니까?

현재 코드는 다음과 같습니다.

if ($(selector).length > 0) {
    // Do something
}

이것에 접근하는 더 우아한 방법이 있습니까?아마 플러그인이나 함수가 될 것인가?


답변

 

자바 스크립트에서는 모든 것이 '진실'또는 'falsy'이며 숫자 0은 false를 의미합니다.그래서 당신은 쓸 수 있습니다 :

if ($(selector).length)

당신은 그것이> 0 부분이 필요하지 않습니다.



답변

네!

jQuery.fn.exists = function(){ return this.length > 0; }

if ($(selector).exists()) {
    // Do something
}

이것은 다음과 같은 것입니다 : Jeff Atwood가있는 코드 팟 캐스트



답변

당신이 사용하는 경우

jQuery.fn.exists = function(){return ($(this).length > 0);}
if ($(selector).exists()) { }

당신은 그것이 아니면 체인이 가능하다는 것을 암시 할 것입니다.

이것은 더 나을 것입니다 :

jQuery.exists = function(selector) {return ($(selector).length > 0);}
if ($.exists(selector)) { }

또는 FAQ에서 :

if ( $('#myDiv').length ) { /* Do something */ }

다음을 사용할 수도 있습니다.jQuery 오브젝트 배열에 값이 없으면 배열의 첫 번째 항목을 가져 오는 것은 정의되지 않게됩니다.

if ( $('#myDiv')[0] ) { /* Do something */ }


답변

이것을 사용할 수 있습니다 :

// if element exists
if($('selector').length){ /* do something */ }

// if element does not exist
if(!$('selector').length){ /* do something */ }


답변

존재를 확인하는 가장 빠르고 가장 의미 적으로 자체 설명하는 방법은 실제로 일반 JavaScript를 사용하는 것입니다.

if (document.getElementById('element_id')) {
    // Do something
}

jQuery 길이 대안보다 쓰는 것이 조금 더 오래지만, 네이티브 JS 메소드이므로 더 빨리 실행됩니다.

그리고 자신의 jQuery 기능을 작성하는 대안보다 낫습니다.그 대안은 @snover가 명시된 이유로 더 느리게됩니다.그러나 존재하는 () 함수가 jQuery에 내재 된 무언가임을 다른 프로그래머에게도 알려줄 것입니다.JavaScript는 지식 부채가 증가하지 않고 코드를 편집하는 다른 사람들이 이해해야합니다.

NB : element_id 앞에 '#'의 부족을 주목하십시오 (이는 일반 JS이기 때문에 jQuery가 아님).



답변

작성하여 몇 바이트를 절약 할 수 있습니다.

if ($(selector)[0]) { ... }

각 jQuery 오브젝트는 배열로 가장 가기 때문에 배열 dereferencing 연산자를 사용하여 배열에서 첫 번째 항목을 가져올 수 있습니다.지정된 인덱스에 항목이 없으면 정의되지 않은 값을 반환합니다.

출처:https://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery