Как получить выражение селектора jQuery в виде текста?
У меня есть селектор jQuery, который имеет цепочку.
Внутри функции я хочу получить доступ к ТЕКСТу, представляющему выражение для селектора.
$("cat dog").function() { // how do I get access to the "cat dog" string from inside THIS function ? };
Я уже упростил в этом примере кода то, что я действительно хочу сделать. Я пишу плагин, и мне нужен доступ к селектору, для которого был создан завернутый набор. Очевидно, что в этом конкретном примере у меня есть доступ к «собаке кошки», потому что я написал ее. Поэтому просто изобразите это в плагине.
- Выберите элемент, когда имя classа начинается с определенного слова
- Селектор атрибутов jQuery для нескольких значений
- Есть ли jQuery-подобный CSS / HTML-селектор, который можно использовать в C #?
- Выбор индекса jQuery
- Как я могу получить соответствующий заголовок таблицы (th) из ячейки таблицы (td)?
Это немного сложно для Google.
edit: свойство ‘selector’, к сожалению, теперь устарело. http://jquery.com/upgrade-guide/1.9/#selector-property-on-jquery-objects
- jQuery выбрать по classу VS выбрать по атрибуту
- Найти все элементы на основе ids с помощью regex в селекторе jQuery
- addID в jQuery?
- Элемент или class LIKE для jQuery?
- Тестирование, если флажок установлен с помощью jQuery
- Выбрать элемент по точному соответствию его содержимому
- jQuery mobile - для каждого события прямого трансляционного события должно существовать эквивалентное событие click?
- Как я могу выбрать элемент с несколькими classами в jQuery?
В объекте 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:
- На данный момент (последняя версия 3.2.1) есть три аргумента в функции
jQuery.fn.init
–selector, context, root
– не два; -
new
ключевое слово должно быть добавлено в оператор returnjQuery.fn.init
; - Внутри вашего плагина селектора возвращаются как строка, вызывая
$(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а. может попасть в массив или что-то еще, и вы можете получить это с помощью индексов.