Как получить выражение селектора jQuery в виде текста?

У меня есть селектор jQuery, который имеет цепочку.

Внутри функции я хочу получить доступ к ТЕКСТу, представляющему выражение для селектора.

$("cat dog").function() { // how do I get access to the "cat dog" string from inside THIS function ? }; 

Я уже упростил в этом примере кода то, что я действительно хочу сделать. Я пишу плагин, и мне нужен доступ к селектору, для которого был создан завернутый набор. Очевидно, что в этом конкретном примере у меня есть доступ к «собаке кошки», потому что я написал ее. Поэтому просто изобразите это в плагине.

Это немного сложно для Google.

edit: свойство ‘selector’, к сожалению, теперь устарело. http://jquery.com/upgrade-guide/1.9/#selector-property-on-jquery-objects

В объекте jQuery есть атрибут «selector», но я не уверен, что он всегда доступен.

Это далеко не оптимально, но работает в некоторых случаях. Вы можете сделать следующее:

 jQuery.fn._init = jQuery.fn.init jQuery.fn.init = function( selector, context ) { return (typeof selector === 'string') ? jQuery.fn._init(selector, context).data('selector', selector) : jQuery.fn._init( selector, context ); }; jQuery.fn.getSelector = function() { return jQuery(this).data('selector'); }; 

Это вернет последний селектор, используемый для элемента. Но он не будет работать на несуществующих элементах.

 
Select me!

Это работает с jQuery 1.2.6 и 1.3.1 и, возможно, с другими версиями.

Также:

 
Select me!

редактировать
Если вы проверите immidiatly после того, как селектор был использован, вы можете использовать следующее в своем плагине:

 jQuery.getLastSelector = function() { return jQuery.getLastSelector.lastSelector; }; jQuery.fn._init = jQuery.fn.init jQuery.fn.init = function( selector, context ) { if(typeof selector === 'string') { jQuery.getLastSelector.lastSelector = selector; } return jQuery.fn._init( selector, context ); }; 

Тогда будет работать следующее:

 
Select me!

В вашем плагине вы можете:

 jQuery.fn.myPlugin = function(){ selector = $.getLastSelector; alert(selector); this.each( function() { //do plugins stuff } } $('div').myPlugin(); //alerts 'div' $('#iDoNotExist').myPlugin(); //alerts '#iDoNotExist' 

Но все равно:

 $div = $('div'); $('foo'); $div.myPlugin(); //alerts 'foo' 

Если вы используете firebug, вы можете console.log(this) внутри функции и посмотреть, доступна ли селекторная строка где-нибудь в объекте. Извините, я не знаком с API jQuery.

Это будет работать, если вы хотите получить доступ к строке выбора в своей функции:

 $(this).html(); 

Это также будет работать, если используется несколько селекторов,

например,

 $('#id1,#id2').click(function(){ alert($(this).html()); }); 

Возможно, это решит вашу проблему:

 var $jqueryItems = $( ".my-selector" ); console.log( $jqueryItems.selector ); // display ".my-selector" 

Для тех, кто хочет попасть в строку селектора плагинов, данную jQuery, я рад, что улучшил отличный ответ, данный @Pim Jager:

  1. На данный момент (последняя версия 3.2.1) есть три аргумента в функции jQuery.fn.initselector, context, root – не два;
  2. new ключевое слово должно быть добавлено в оператор return jQuery.fn.init ;
  3. Внутри вашего плагина селектора возвращаются как строка, вызывая $(this).getSelector();

Наконец, вот что я должен работать для меня как шарм:

 (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.YOUR-PLUGIN = function() { var selector = $(this).getSelector(); // selectors string given to jQuery // other code } })(jQuery, window, document); 

Он работает с версиями jQuery, насколько мне известно (от 1.7.0 до 3.2.1).

PS . Прекрасно работает даже с jQuery 1.2.3, доступным здесь и в stackoverflow. Итак, я думаю, следующее для всех версий jQuery подходит, если вы хотите получить выражение селектора jQuery в виде текста внутри плагина:

 // our plugin (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(); }); 
  

some bold text

Я не мог понять, как получить ссылку на строковое значение селектора, предоставленного внутри $ (‘value_i_want_here’) при привязке к функции; кажется сложной проблемой. Однако, если вы предпочитаете тестирование в IE [x], всегда есть Firebug Lite, который отлично работает с использованием console.log (var | val).

ну, я все еще пытаюсь выяснить, пытаетесь ли вы получить имя элемента? или id и / или class или все это.

Вы можете получить элемент с этим

 var element = $ (this) .get (0);
 var id = $ (this) .attr ('id');
 var class = $ (this) .attr ('class');

не уверен, что произойдет, если у вас более одного classа. может попасть в массив или что-то еще, и вы можете получить это с помощью индексов.

  • Каков самый быстрый способ выбора элементов-потомков в jQuery?
  • полный календарный выбор ячейки на мобильном устройстве?
  • Как работают PrimeFaces Selectors как в update = "@ (. MyClass)"?
  • Случай селектора CSS для атрибутов
  • jQuery .bind () vs. .on ()
  • jQuery ИЛИ Селектор?
  • Эффективный, лаконичный способ найти следующий соответствующий друг?
  • : nth-of-type () в jQuery / Sizzle?
  • поиск jQuery и контекст
  • jQuery как найти элемент на основе значения атрибута данных?
  • Установите опцию выбора «selected», по значению
  • Давайте будем гением компьютера.