我创建了一个像
这样的插件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
*/
}
答案 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版本。