如何知道jquery插件中的选择器

时间:2011-10-07 17:30:40

标签: jquery jquery-plugins

我创建了一个像

这样的插件
jQuery.fn.Foo = function () { 

          //var str=   get selector some_how  ; alert(str);      

          //at this point get selector that invoked this function


          //eg:
          /*
                jQuery('.red').Foo(); /// alert's .red
                jQuery('#something_else') //alert's  #something_else
          */


    }

2 个答案:

答案 0 :(得分:2)

jQuery对象具有选择器属性。您可以访问this.selector

答案 1 :(得分:0)

这就是我在2017年的插件中获取选择器字符串的方式:

(function($, window, document, undefined) { 
    $.fn._init = $.fn.init
    $.fn.init = function( selector, context, root ) {
        return (typeof selector === 'string') ? new $.fn._init(selector, context, root).data('selector', selector) : new $.fn._init( selector, context, root );
    };
    $.fn.getSelector = function() {
        return $(this).data('selector');
    };
    $.fn.coolPlugin = function() {
        var selector = $(this).getSelector(); 
        if(selector) console.log(selector); // outputs p #boldText
    }
})(jQuery, window, document);

// calling plugin
$(document).ready(function() {
    $("p #boldText").coolPlugin();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>some <b id="boldText">bold text</b></p>

这个想法是根据是否提供选择器字符串有条件地包装jQuery的init()函数。如果提供,请使用jQuery的data()方法将选择器字符串与最终调用的原始init()相关联。小getSelector()插件只占用以前存储的值。它可以在插件中稍后调用。它应该适用于所有jQuery版本。