Is there an “exists” function for jQuery?

前端 未结 30 3091
野性不改
野性不改 2020-11-21 04:52

How can I check the existence of an element in jQuery?

The current code that I have is this:

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


        
相关标签:
30条回答
  • 2020-11-21 05:15

    Try testing for DOM element

    if (!!$(selector)[0]) // do stuff
    
    0 讨论(0)
  • 2020-11-21 05:16

    I just like to use plain vanilla javascript to do this.

    function isExists(selector){
      return document.querySelectorAll(selector).length>0;
    }
    
    0 讨论(0)
  • 2020-11-21 05:17

    How about:

    function exists(selector) {
        return $(selector).length;
    }
    
    if (exists(selector)) {
        // do something
    }
    

    It's very minimal and saves you having to enclose the selector with $() every time.

    0 讨论(0)
  • 2020-11-21 05:18

    There's no need for jQuery really. With plain JavaScript it's easier and semantically correct to check for:

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

    If for any reason you don't want to put an id to the element, you can still use any other JavaScript method designed to access the DOM.

    jQuery is really cool, but don't let pure JavaScript fall into oblivion...

    0 讨论(0)
  • 2020-11-21 05:18

    Inspired by hiway's answer I came up with the following:

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

    jQuery.contains takes two DOM elements and checks whether the first one contains the second one.

    Using document.documentElement as the first argument fulfills the semantics of the exists method when we want to apply it solely to check the existence of an element in the current document.

    Below, I've put together a snippet that compares jQuery.exists() against the $(sel)[0] and $(sel).length approaches which both return truthy values for $(4) while $(4).exists() returns false. In the context of checking for existence of an element in the DOM this seems to be the desired result.

    $.fn.exists = function() {
        return $.contains(document.documentElement, this[0]); 
      }
      
      var testFuncs = [
        function(jq) { return !!jq[0]; },
        function(jq) { return !!jq.length; },
        function(jq) { return jq.exists(); },
      ];
        
      var inputs = [
        ["$()",$()],
        ["$(4)",$(4)],
        ["$('#idoexist')",$('#idoexist')],
        ["$('#idontexist')",$('#idontexist')]
      ];
      
      for( var i = 0, l = inputs.length, tr, input; i < l; i++ ) {
        input = inputs[i][1];
        tr = "<tr><td>" + inputs[i][0] + "</td><td>"
              + testFuncs[0](input) + "</td><td>"
              + testFuncs[1](input) + "</td><td>"
              + testFuncs[2](input) + "</td></tr>";
        $("table").append(tr);
      }
    td { border: 1px solid black }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="idoexist">#idoexist</div>
    <table style>
    <tr>
      <td>Input</td><td>!!$(sel)[0]</td><td>!!$(sel).length</td><td>$(sel).exists()</td>
    </tr>
    </table>
    <script>
      
      $.fn.exists = function() {
        return $.contains(document.documentElement, this[0]); 
      }
      
    </script>

    0 讨论(0)
  • 2020-11-21 05:19

    I had a case where I wanted to see if an object exists inside of another so I added something to the first answer to check for a selector inside the selector..

    // Checks if an object exists.
    // Usage:
    //
    //     $(selector).exists()
    //
    // Or:
    // 
    //     $(selector).exists(anotherSelector);
    jQuery.fn.exists = function(selector) {
        return selector ? this.find(selector).length : this.length;
    };
    
    0 讨论(0)
提交回复
热议问题