Могу ли я получить доступ к имени последней используемой операции пересечения в цепочке?
-
04-10-2019 - |
Вопрос
Мне было интересно, можно ли добраться до названия метода, который создал текущий массив элементов.
Я пытался найти его в самом объекте jQuery, но я не вижу места, где он может быть сохранен.
Попробуйте заполнить это в
$.fn.myfunc=function(){
//your brilliant idea here
return functname;
}
$('body').find('.a').myfunc(); //returns 'find'
$('body').children('.a').myfunc(); //returns 'children'
$('body').find('.a').next('div').myfunc(); //returns 'next'
//and if You're really awesome:
$('body').find('.a').next('div').css('float','left').myfunc(); //returns 'next'
Решение
Этот пример не идеален, но он извлекает последнюю операцию для многих ситуаций (находки, фильтр, дети, следующие) - http://jsfiddle.net/x7lmw/3/ Отказ Исходя из внутренних органов jquery.pushstack http://github.com/jquery/jquery/blob/master/src/core.js#l204.
function last_operation( $$ ) {
var selector = $$.selector,
selector_cmpr;
while ( ( selector_cmpr = remove_paren( selector ) ) != selector ) {
selector = selector_cmpr;
}
var operations = selector.split('.'),
is_find = selector.replace(/, /, '').split(' ').length > 1,
operation;
if ( is_find ) {
operation = 'find';
} else if ( operations.length > 1 ) {
operation = operations[ operations.length - 1 ].replace(/PAREN/, '')
} else {
operation = 'unknown';
}
return operation;
function remove_paren( str ) {
var str_cmpr = str.replace(/\([^()]+\)/, 'PAREN');
return str_cmpr;
}
}
Другие советы
Bounty идет к Bbonified для поиска пути.
Это мое обновление в функции Last_operation. $ () признан .find () нарочно.
$.fn.lastop=function(){
var s=this.selector.replace(/^.*\.([a-zA-Z]+)\([^()]*\)[^ ()]*$|.*/,'$1');
return s?s:'find';
}
Это использовалось здесь: http://www.jsfiddle.net/naugtur/rdeau/
Не связан с StackOverflow