Add jQuery function to specific elements

前端 未结 9 1463
悲&欢浪女
悲&欢浪女 2020-12-07 18:56

I know that you can add new jQuery functions by $.fn.someFunction = function()

However, I want to add functions to specific elements only. I tried this

相关标签:
9条回答
  • 2020-12-07 19:11

    Yo, needed to do the same thing, came up with this. its nice cause you destroy the element and function goes poof! I think...

    var snippet=jQuery(".myElement");
    snippet.data('destructor', function(){
        //do something
    });
    snippet.data('destructor')();
    
    0 讨论(0)
  • 2020-12-07 19:11

    I actually had this use case as well, but with a cached object. So I already had a jQuery object, a toggle-able menu, and I wanted to attach two functions to that object, "open" and "close". The functions needed to preserve the scope of the element itself and that was it, so I wanted this to be the menu object. Anyway, you can just add functions and variables all willy nilly, just like any other javascript object. Sometimes I forget that.

    var $menu = $('#menu');
    $menu.open = function(){
       this.css('left', 0);
       this.is_open = true; // you can also set arbitrary values on the object
    };
    $menu.close = function(){
       this.css('left', '-100%');
       this.is_open = false;
    };
    
    $menu.close();
    
    0 讨论(0)
  • 2020-12-07 19:13

    @Reigel's answer is great! However you could also use the $.fn syntax and let your function only handle certain elements:

    $.fn.someFunction = function(){
        this.each(function(){
            // only handle "someElement"
            if (false == $(this).hasClass("someElement")) {
                return; // do nothing
            }
    
            $(this).append(" some element has been modified");
    
            return $(this); // support chaining
        });    
    };
    
    // now you can call your function like this
    $('.someElement').someFunction();            
    

    See working jsfiddle: http://jsfiddle.net/AKnKj/3/

    0 讨论(0)
  • 2020-12-07 19:15

    If you're wanting this function only for particular selectors, the following will work for you. I've just had a scenario where I've needed this and it works nicely.

    $('.my-selector').each(function(){
    
        $(this).init.prototype.getUrl = function(){
            // do things
        };
    })
    

    then later on you can do

    $('.my-selector').getUrl()
    

    without having to define it as a plugin, or use data or bind/on/trigger events.

    Obviously you can change the function to return the containing object if you want to use it in chaining by returning this

    $('.my-selector').each(function(){
    
        $(this).init.prototype.getUrl = function(){
            // do things
            return this;
        };
    })
    
    0 讨论(0)
  • 2020-12-07 19:18

    yo can do the above with this:

    $.fn.testFn = function(){
        this.each(function(){
            var className = $(this).attr('class');
            $(this).html(className);
        });    
    };
    
    $('li').testFn(); //or any element you want
    

    Test: http://jsfiddle.net/DarkThrone/nUzJN/

    0 讨论(0)
  • 2020-12-07 19:20

    The most obvious solution is to assign a function as the object's property:

    obj.prop("myFunc", function() {
      return (function(arg) {
        alert("It works! " + arg);
      });
    });
    

    Then call it on the object this way:

    obj.prop("myFunc")("Cool!");
    

    Note: your function is the return value of the outer one, see: http://api.jquery.com/prop/#prop-propertyName-function

    0 讨论(0)
提交回复
热议问题