Получить текущую строку селектора jQuery? - PullRequest
24 голосов
/ 21 февраля 2012

Как вызвать текущую строку селектора при вызове пользовательского плагина?

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

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

Ответы [ 7 ]

36 голосов
/ 21 февраля 2012

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

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

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

14 голосов
/ 05 февраля 2014

Устаревание после селектора v. 1.7:

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

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

Тамэто более чистые способы, но после удаления .selector из-за несовместимости браузеров начиная с версии 1.7 это стало моей идеей.

2 голосов
/ 29 июня 2017

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

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

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

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

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

Избыточный, да, но это всегда надежно.

1 голос
/ 22 июня 2018

Лучшее рабочее значение -

function mySelector(selector) {
    return $.extend($(selector),{"selector":selector});
}

. Возвращает классический объект jquery, так как $ () будет

mySelector(".myClass")

и возвращает строку селектора

mySelector(".myClass").selector
.
1 голос
/ 26 апреля 2014

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

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

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

или если вы действительно дешевы со строками

select = $("#category option[value=#{document.getElementById('category').value}]")[0].innerHTML
1 голос
/ 21 февраля 2012
jQuery.fn.getSelector = function() {
        return this.data('selector');
};
0 голосов
/ 18 сентября 2018

Распространение на kevinmicke answer : Вы можете получить селектор в вашем объекте события, который вы передаете функциям обратного вызова.

В функциях обратного вызова

event.handleObj.selector

Пример:

Вы получите строку селектора в e.handleObj.selector

    $( '.container' )
    .on('change', 'select.mySelector', function (e) {
        console.log(JSON.stringify(e));
        $('.selector').text(e.handleObj.selector);
        $('.value').text($(this).val());
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="container">

  <select class="mySelector">
    <option value="volvo">Volvo</option>
    <option value="saab">Saab</option>
    <option value="mercedes">Mercedes</option>
    <option value="audi">Audi</option>
  </select>
  <h3>Your Selector: <span class="selector"></span></h3>
  <h3>Selected Value: <span class="value"></span></h3>
  
</div>

Console Log дает объект, подобный этому:

{
    // ...skipped lines
    "handleObj": {
        "type": "change",
        "origType": "change",
        "guid": 1,
        "selector": "select.mySelector",
        "needsContext": false,
        "namespace": ""
    }
}
...