2012-02-21 5 views
22

При вызове пользовательского плагина, как я могу получить текущую селекторную строку?Получить текущую строку селектора jQuery?

$('my_selector p').my_plugin(); 

Хотел бы вывести my_selector p в мой сценарий. Как я могу получить доступ к этой строке?

+1

дубликат http://stackoverflow.com/questions/500246/how-do-i-get-a-jquery-selectors-expression-as-text – jbabey

ответ

34

Вы можете использовать selector свойство:

$('my_selector p').selector // my_selector p 

версия устаревшее:1.7, удалены:.1.9

+8

Это устарело, поскольку jQuery 1.7 - посмотрите ответ tibc-dev. – skz

+0

@skz - право выбора свойства jQuery ** устарело с 1.7 ** и ** удалено на 1.9 **: [Свойство jQuery .selector (Убрано, устарело)] (https://api.jquery.com/selector /) – AlbertFM

+9

Вместо того, чтобы заявлять, что оно устарело и удалено, как насчет того, чтобы вы сказали нам подходящую альтернативу. – Studocwho

2
jQuery.fn.getSelector = function() { 
     return this.data('selector'); 
}; 
+1

+1 для показа расширения расширения jquery. используйте этот метод $ ('someSelector'). getSelector(); – mindandmedia

+3

Получил 'undefined' в моем случае (jQuery v2.2.4). – 10basetom

12

Сообщение Селектор устаревания v 1.7:

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

var selector = (typeof($(this).attr('id')) !== 'undefined' || $(this).attr('id') !== null) ? '#' + $(this).attr('id') : '.' + $(this).attr('class'); 

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

+1

Что делать, если $ (this) .attr ('class') возвращает более одного класса? это сделает неверный селектор, вы должны сделать '.' + $ (this) .attr ('class'). split ("") .join (".") вместо этого. – vasilevich

+0

Также, если селектор похож на '.unique-class-123 p strong.help', он вернется только '.help' – CodeBrauer

1

С сектором осуждается я использую

index = document.getElementById('category').value 
select = $("#category option[value=#{index}]")[0].innerHTM 

только две строки кода

или, если вы действительно дешево с линиями

select = $("#category option[value=#{document.getElementById('category').value}]")[0].innerHTML 
1

устарела, официальный совет, чтобы добавить селектор в качестве параметра в вашей функции: https://api.jquery.com/selector/

Плагины, которые должны использовать селекторную строку в своем плагине, могут потребовать ее в качестве параметра метода. Например, плагин "Foo" может быть записана в виде

$.fn.foo = function(selector, options) { /* plugin code goes here */ }; 

и человек, использующий плагин будет написать

$("div.bar").foo("div.bar", {dog: "bark"}); 

избыточностью, да, но это всегда надежно.

Смежные вопросы