복붙노트

[JQUERY] jQuery를위한 기능이 "존재"인가?

JQUERY

jQuery를위한 기능이 "존재"인가?

해결법


  1. 1.자바 스크립트에서는 모든 것이 'truthy'또는 'falsy'0 수단 거짓 번호, 다른 모든 사실입니다. 당신이 쓸 수 있도록 :

    자바 스크립트에서는 모든 것이 'truthy'또는 'falsy'0 수단 거짓 번호, 다른 모든 사실입니다. 당신이 쓸 수 있도록 :

    if ($(selector).length)
    

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


  2. 2.예!

    예!

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

    제프 앳 우드와 방목 코드 팟 캐스트 :이 응답에


  3. 3.당신이 사용하는 경우

    당신이 사용하는 경우

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

    당신은하지 않을 때 체인하는 것이 가능하다는 것을 의미한다.

    이것은 더 좋을 것이다 :

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

    또한, 자주 묻는 질문에서 :

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

    당신은 또한 다음을 사용할 수 있습니다. 더 값이 jQuery 오브젝트의 배열이없는 경우 배열의 첫 번째 항목이 정의되지 않은 반환 받고.

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

  4. 4.당신은이를 사용할 수 있습니다 :

    당신은이를 사용할 수 있습니다 :

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

  5. 5.존재를 확인하는 가장 빠르고 가장 의미 자체 설명하는 방법은 일반 자바 스크립트를 사용하여 실제로 :

    존재를 확인하는 가장 빠르고 가장 의미 자체 설명하는 방법은 일반 자바 스크립트를 사용하여 실제로 :

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

    네이티브 JS 방식이기 때문에 빠르게 jQuery를 길이 다른 것보다 쓰기,하지만이 실행에 조금 더 길다.

    그리고 그것은 자신의 jQuery 함수를 작성의 대안보다 낫다. 그 대안은 @snover 언급 한 이유 느립니다. 그러나 그것은 또한 다른 프로그래머에게이 존재한다는 인상을 줄 것이다 () 함수는 jQuery를 고유 무언가이다. 자바 스크립트는 / 증가 된 지식 부채없이, 당신의 코드를 편집 다른 사람에 의해 이해되어야한다.

    NB : 주목하라 element_id 전에 '#'의 부족 (이 일반 JS하지 jQuery를 때문에).


  6. 6.당신은 서면으로 몇 바이트를 저장할 수 있습니다 :

    당신은 서면으로 몇 바이트를 저장할 수 있습니다 :

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

    이 작품은 각각의 jQuery 객체는 가장 무도회는 배열로, 그래서 우리는 배열에서 첫 번째 항목을 얻을 수있는 배열 역 참조 연산자를 사용할 수 있기 때문이다. 지정된 인덱스에 항목이없는 경우는 undefined를 반환합니다.


  7. 7.당신이 사용할 수있는:

    당신이 사용할 수있는:

    if ($(selector).is('*')) {
      // Do something
    }
    

    아마도 더 우아한 약간.


  8. 8.이 플러그인은 경우 ($ (ELE) .exist ()) {/ * DO WORK * /} 또는 사용하는 콜백처럼 if 문에서 사용할 수 있습니다.

    이 플러그인은 경우 ($ (ELE) .exist ()) {/ * DO WORK * /} 또는 사용하는 콜백처럼 if 문에서 사용할 수 있습니다.

    ;;(function($) {
        if (!$.exist) {
            $.extend({
                exist: function() {
                    var ele, cbmExist, cbmNotExist;
                    if (arguments.length) {
                        for (x in arguments) {
                            switch (typeof arguments[x]) {
                                case 'function':
                                    if (typeof cbmExist == "undefined") cbmExist = arguments[x];
                                    else cbmNotExist = arguments[x];
                                    break;
                                case 'object':
                                    if (arguments[x] instanceof jQuery) ele = arguments[x];
                                    else {
                                        var obj = arguments[x];
                                        for (y in obj) {
                                            if (typeof obj[y] == 'function') {
                                                if (typeof cbmExist == "undefined") cbmExist = obj[y];
                                                else cbmNotExist = obj[y];
                                            }
                                            if (typeof obj[y] == 'object' && obj[y] instanceof jQuery) ele = obj[y];
                                            if (typeof obj[y] == 'string') ele = $(obj[y]);
                                        }
                                    }
                                    break;
                                case 'string':
                                    ele = $(arguments[x]);
                                    break;
                            }
                        }
                    }
    
                    if (typeof cbmExist == 'function') {
                        var exist =  ele.length > 0 ? true : false;
                        if (exist) {
                            return ele.each(function(i) { cbmExist.apply(this, [exist, ele, i]); });
                        }
                        else if (typeof cbmNotExist == 'function') {
                            cbmNotExist.apply(ele, [exist, ele]);
                            return ele;
                        }
                        else {
                            if (ele.length <= 1) return ele.length > 0 ? true : false;
                            else return ele.length;
                        }
                    }
                    else {
                        if (ele.length <= 1) return ele.length > 0 ? true : false;
                        else return ele.length;
                    }
    
                    return false;
                }
            });
            $.fn.extend({
                exist: function() {
                    var args = [$(this)];
                    if (arguments.length) for (x in arguments) args.push(arguments[x]);
                    return $.exist.apply($, args);
                }
            });
        }
    })(jQuery);
    

    jsFiddle

    당신은 하나 또는 두 개의 콜백을 지정할 수 있습니다. 첫 번째 요소가 존재하는 경우 요소가 존재하지 않는 경우, 두 번째가 발광 발광합니다. 당신은 단지 하나 개의 함수를 통과하도록 선택할 경우,이 요소는 화재 존재 때. 선택된 요소가 존재하지 않는 경우에 따라서, 쇄 죽는다. 이 존재하는 경우 물론, 첫 번째 함수는 발사하고 체인이 계속됩니다.

    콜백 변형을 사용하는 chainability을 유지하는 데 도움이 있다는 사실을 숙지 - 요소가 반환됩니다 그리고 당신은 다른 jQuery를 법으로 명령을 체인을 계속할 수 있습니다!

    if ($.exist('#eleID')) {    /*    DO WORK    */ }        //    param as STRING
    if ($.exist($('#eleID'))) { /*    DO WORK    */ }        //    param as jQuery OBJECT
    if ($('#eleID').exist()) {  /*    DO WORK    */ }        //    enduced on jQuery OBJECT
    
    $.exist('#eleID', function() {            //    param is STRING && CALLBACK METHOD
        /*    DO WORK    */
        /*    This will ONLY fire if the element EXIST    */
    }, function() {            //    param is STRING && CALLBACK METHOD
        /*    DO WORK    */
        /*    This will ONLY fire if the element DOES NOT EXIST    */
    })
    
    $('#eleID').exist(function() {            //    enduced on jQuery OBJECT with CALLBACK METHOD
        /*    DO WORK    */
        /*    This will ONLY fire if the element EXIST    */
    })
    
    $.exist({                        //    param is OBJECT containing 2 key|value pairs: element = STRING, callback = METHOD
        element: '#eleID',
        callback: function() {
            /*    DO WORK    */
            /*    This will ONLY fire if the element EXIST    */
        }
    })
    

  9. 9.나는 모든 검사 기능을 프로토 타입 대신 함수에 숫자 패스, 그렇다면, 그들은, 그것은, 많은 경우에 OK가 아닌 100 % 상상할 수있는 요소의 길이를 확인 여기에 대한 답변의 대부분을 볼 그들이해야대로 정확하지 않습니다 그것이 있어야로 조건과 답을 반환 :

    나는 모든 검사 기능을 프로토 타입 대신 함수에 숫자 패스, 그렇다면, 그들은, 그것은, 많은 경우에 OK가 아닌 100 % 상상할 수있는 요소의 길이를 확인 여기에 대한 답변의 대부분을 볼 그들이해야대로 정확하지 않습니다 그것이 있어야로 조건과 답을 반환 :

    $.fn.exists = $.fn.exists || function() { 
      return !!(this.length && (this[0] instanceof HTMLDocument || this[0] instanceof HTMLElement)); 
    }
    

    이 지금 당신이이 방법을 확인할 수, 길이, 유형을 모두 확인합니다 :

    $(1980).exists(); //return false
    $([1,2,3]).exists(); //return false
    $({name: 'stackoverflow', url: 'http://www.stackoverflow.com'}).exists(); //return false
    $([{nodeName: 'foo'}]).exists() // returns false
    $('div').exists(); //return true
    $('.header').exists(); //return true
    $(document).exists(); //return true
    $('body').exists(); //return true
    

  10. 10.정말 jQuery를위한 필요가 없습니다. 일반 자바 스크립트로 그것은 쉽고 확인하는 의미 맞습니다 :

    정말 jQuery를위한 필요가 없습니다. 일반 자바 스크립트로 그것은 쉽고 확인하는 의미 맞습니다 :

    if(document.getElementById("myElement")) {
        //Do something...
    }
    

    어떤 이유로 당신이 요소에 ID를 넣어하지 않으려면, 당신은 여전히 ​​DOM에 액세스하기위한 다른 자바 스크립트 방법을 사용할 수 있습니다.

    jQuery를 정말 멋진하지만, 망각에 순수 자바 스크립트 가을을 못하게 ...


  11. 11.당신은이를 사용할 수 있습니다 :

    당신은이를 사용할 수 있습니다 :

    jQuery.fn.extend({
        exists: function() { return this.length }
    });
    
    if($(selector).exists()){/*do something*/}
    

  12. 12.이전의 모든 답변의 이유는 .length 매개 변수들이 대부분 커튼 뒤에 querySelectorAll을 가지고 jQuery의 $ () 선택기를 사용하는 것입니다 필요 (또는 그들이 직접 사용). 그것은 그 선택에 대한 모든 경기를 찾고 그들과 배열을 채우는 전체 DOM 트리를 구문 분석해야하기 때문에이 방법은 다소 느립니다.

    이전의 모든 답변의 이유는 .length 매개 변수들이 대부분 커튼 뒤에 querySelectorAll을 가지고 jQuery의 $ () 선택기를 사용하는 것입니다 필요 (또는 그들이 직접 사용). 그것은 그 선택에 대한 모든 경기를 찾고 그들과 배열을 채우는 전체 DOM 트리를 구문 분석해야하기 때문에이 방법은 다소 느립니다.

    에서 [ '길이'] 매개 변수가 필요하거나 유용하고 찾을 수없는 경우는 먼저 일치 요소는 null을 반환하기 때문에 직접, 대신 document.querySelector (선택)를 사용하는 경우 코드는 훨씬 빨리 될 것입니다 없습니다.

    function elementIfExists(selector){  //named this way on purpose, see below
        return document.querySelector(selector);
    }
    /* usage: */
    var myelement = elementIfExists("#myid") || myfallbackelement;
    

    그러나 실제 개체가 반환되는이 방법은 잎 우리를; 이는이 변수로 저장하고 (따라서 우리가 잊어 버린 경우 주변의 참조를 유지)를 반복해서 사용하지 않을 경우 괜찮습니다.

    var myel=elementIfExists("#myid");
    // now we are using a reference to the element which will linger after removal
    myel.getParentNode.removeChild(myel);
    console.log(elementIfExists("#myid")); /* null */
    console.log(myel); /* giant table lingering around detached from document */
    myel=null; /* now it can be garbage collected */
    

    어떤 경우에는이 바람직 할 수있다. 그것은이 같은 for 루프에서 사용할 수 있습니다 :

    /* locally scoped myel gets garbage collected even with the break; */
    for (var myel; myel = elementIfExist(sel); myel.getParentNode.removeChild(myel))
        if (myel == myblacklistedel) break;
    

    실제로 요소를 필요로하지 않으며, 그것은 / 저장을 단지 참 / 거짓의를 얻기 위해 단지를 두 번하지합니다! 그것은 왜 매듭 여기, 비구 속성 와서 신발 작동?

    function elementExists(selector){
        return !!document.querySelector(selector);
    }
    /* usage: */
    var hastables = elementExists("table");  /* will be true or false */
    if (hastables){
        /* insert css style sheet for our pretty tables */
    }
    setTimeOut(function (){if (hastables && !elementExists("#mytablecss"))
                               alert("bad table layouts");},3000);
    

  13. 13.당신이 원하는 $ .contains ()인가?

    당신이 원하는 $ .contains ()인가?


  14. 14.($ (선택) .length는) {} 불충분하면 나는 발견했다. 선택은 빈 객체는 {} 일 때 그것은 자동으로 귀하의 응용 프로그램을 중단합니다.

    ($ (선택) .length는) {} 불충분하면 나는 발견했다. 선택은 빈 객체는 {} 일 때 그것은 자동으로 귀하의 응용 프로그램을 중단합니다.

    var $target = $({});        
    console.log($target, $target.length);
    
    // Console output:
    // -------------------------------------
    // [▼ Object              ] 1
    //    ► __proto__: Object
    

    내 유일한 제안은 {}에 대한 추가 검사를 수행하는 것입니다.

    if ($.isEmptyObject(selector) || !$(selector).length) {
        throw new Error('Unable to work with the given selector.');
    }
    

    나는 아직도이 하나가 비트 무거운로하지만 더 나은 솔루션을 찾고 있어요.

    편집 : 경고! 선택이 문자열 때 IE에서 작동하지 않습니다.

    $.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE
    

  15. 15.당신은 요소가 존재 또는 자바 스크립트에서 길이를 사용하지 않는 확인할 수 있습니다. 길이가 0보다 큰 다음 원소 인 경우 길이가 0 인 경우 다음 존재 요소는 존재하지

    당신은 요소가 존재 또는 자바 스크립트에서 길이를 사용하지 않는 확인할 수 있습니다. 길이가 0보다 큰 다음 원소 인 경우 길이가 0 인 경우 다음 존재 요소는 존재하지

    // These by Id
    if ($("#elementid").length > 0) {
      // Element is Present
    } else {
      // Element is not Present
    }
    
    // These by Class
    if ($(".elementClass").length > 0) {
      // Element is Present
    } else {
      // Element is not Present
    }
    

  16. 16.요소의 존재를 확인 공식 jQuery를 웹 사이트 자체에 깔끔하게 설명되어 있습니다!

    요소의 존재를 확인 공식 jQuery를 웹 사이트 자체에 깔끔하게 설명되어 있습니다!


  17. 17.이 모든 응답과 매우 비슷하지만, 이유는 사용하지! 운영자는 두 번 그래서 당신은 부울을 얻을 수 있습니다 :

    이 모든 응답과 매우 비슷하지만, 이유는 사용하지! 운영자는 두 번 그래서 당신은 부울을 얻을 수 있습니다 :

    jQuery.fn.exists = function(){return !!this.length};
    
    if ($(selector).exists()) {
        // the element exists, now what?...
    }
    

  18. 18.

    $(selector).length && //Do something
    

  19. 19.DOM 요소에 대한 테스트를 시도

    DOM 요소에 대한 테스트를 시도

    if (!!$(selector)[0]) // do stuff
    

  20. 20.했는가의 대답에 영감을 나는 다음과 함께했다 :

    했는가의 대답에 영감을 나는 다음과 함께했다 :

    $.fn.exists = function() {
        return $.contains( document.documentElement, this[0] );
    }
    

    첫 번째는 두 번째를 포함하는지 여부 jQuery.contains 두 DOM 요소와 검사 걸린다.

    첫 번째 인수로 document.documentElement를 사용하는 것은 우리가 현재 문서에서 요소의 존재를 확인에만 적용 할 때이 방법을 존재의 의미를 충족합니다.

    다음, 나는 함께 $에있는 모두 반환 truthy 값 (4) $ 동안 (4) .exists 접근 .length $ (SEL)에 대해 jQuery.exists ()를 비교하는 조각 [0] $ (SEL)을 넣었습니다 ()는 false를 돌려줍니다. DOM에있는 요소의 존재를 확인하는 맥락에서이 목적하는 결과를 보인다.

    $ .fn.exists = 함수 () { 리턴 $의 .contains (document.documentElement이 [0]); } VAR의 testFuncs = 함수 (JQ) {창 !! JQ [0]; }, 함수 (JQ) {창 jq.length!; }, 함수 (JQ) {복귀 jq.exists (); }, ]; VAR 입력 = [ "$ ()"$ ()], [ "$ (4)"$ (4)], [ "$ ( '#의 idoexist')"$ ( '#의 idoexist')], [ "$ ( '#의 idontexist')"$ ( '#의 idontexist')] ]; 위한 VAR (I 0, L = inputs.length, TR, 입력 =; I " testFuncs + [0] (입력) + " " testFuncs + [1] (입력) + " " testFuncs + [2] (입력) + " "; $ ( "테이블") APPEND (TR).; } TD {국경 : 1 픽셀의 검은 색} <스크립트 SRC = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">

    # idoexist <표 스타일> 입력 $! (SEL) [0] $! (SEL) .length $ (SEL) .exists ()