Is there an “exists” function for jQuery?

前端 未结 30 3090
野性不改
野性不改 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:10

    I stumbled upon this question and i'd like to share a snippet of code i currently use:

    $.fn.exists = function(callback) {
        var self = this;
        var wrapper = (function(){
                function notExists () {}
    
                notExists.prototype.otherwise = function(fallback){
                    if (!self.length) {                    
                        fallback.call();
                    }
                };
    
                return new notExists;
            })();
    
        if(self.length) {
            callback.call();    
        }
    
        return wrapper;
    }
    

    And now i can write code like this -

    $("#elem").exists(function(){
        alert ("it exists");
    }).otherwise(function(){
        alert ("it doesn't exist");
    });
    

    It might seem a lot of code, but when written in CoffeeScript it is quite small:

    $.fn.exists = (callback) ->
        exists = @length
        callback.call() if exists        
        new class
           otherwise: (fallback) ->            
                fallback.call() if not exists
    
    0 讨论(0)
  • 2020-11-21 05:11

    $("selector") returns an object which has the length property. If the selector finds any elements, they will be included in the object. So if you check its length you can see if any elements exist. In JavaScript 0 == false, so if you don't get 0 your code will run.

    if($("selector").length){
       //code in the case
    } 
    
    0 讨论(0)
  • 2020-11-21 05:12

    I'm using this:

        $.fn.ifExists = function(fn) {
          if (this.length) {
            $(fn(this));
          }
        };
        $("#element").ifExists( 
          function($this){
            $this.addClass('someClass').animate({marginTop:20},function(){alert('ok')});               
          }
        ); 
    

    Execute the chain only if a jQuery element exist - http://jsfiddle.net/andres_314/vbNM3/2/

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

    Here is the complete example of different situations and way to check if element exists using direct if on jQuery selector may or may not work because it returns array or elements.

    var a = null;
    
    var b = []
    
    var c = undefined ;
    
    if(a) { console.log(" a exist")} else { console.log("a doesn't exit")}
    // output: a doesn't exit
    
    if(b) { console.log(" b exist")} else { console.log("b doesn't exit")}
    // output: b exist
    
    if(c) { console.log(" c exist")} else { console.log("c doesn't exit")}
    // output: c doesn't exit
    

    FINAL SOLUTION

    if($("#xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
    //output : xusyxxs doesnn't exist
    
    if($(".xysyxxs").length){ console.log("xusyxxs exist")} else { console.log("xusyxxs doesnn't exist") }
        //output : xusyxxs doesnn't exist
    

    Demo

    console.log("existing id", $('#id-1').length)
    console.log("non existing id", $('#id-2').length)
    
    console.log("existing class single instance", $('.cls-1').length)
    console.log("existing class multiple instance", $('.cls-2').length)
    console.log("non existing class", $('.cls-3').length)
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <div id="id-1">
      <div class="cls-1 cls-2"></div>
      <div class="cls-2"></div>
    </div>

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

    You don't have to check if it's greater than 0 like $(selector).length > 0, $(selector).length it's enough and an elegant way to check the existence of elements. I don't think that it is worth to write a function only for this, if you want to do more extra things, then yes.

    if($(selector).length){
      // true if length is not 0
    } else {
      // false if length is 0
    }
    
    0 讨论(0)
  • 2020-11-21 05:14

    I have found if ($(selector).length) {} to be insufficient. It will silently break your app when selector is an empty object {}.

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

    My only suggestion is to perform an additional check for {}.

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

    I'm still looking for a better solution though as this one is a bit heavy.

    Edit: WARNING! This doesn't work in IE when selector is a string.

    $.isEmptyObject('hello') // FALSE in Chrome and TRUE in IE
    
    0 讨论(0)
提交回复
热议问题