Puis-je accéder à un nom de la dernière opération de déplacement utilisé dans une chaîne?
-
04-10-2019 - |
Question
Je me demandais s'il est possible d'obtenir le nom de la méthode qui a créé un ensemble d'éléments en cours.
J'ai essayé de le trouver dans l'objet jquery lui-même, mais je ne vois pas un endroit où il pourrait être stocké.
Essayez de remplir ce dans
$.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'
La solution
Cet exemple n'est pas parfait, mais il extrait la dernière opération pour de nombreuses situations (trouver, filtre, enfants, à côté) - http://jsfiddle.net/X7LmW/3/ . Sur la base de des entrailles de jQuery.pushStack http: // github .com / jquery / jquery / blob / maître / 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;
}
}
Autres conseils
Bounty va BBonified pour trouver le chemin.
Ceci est ma mise à niveau sur la fonction last_operation. $ () est reconnu comme .Find () sur le but.
$.fn.lastop=function(){
var s=this.selector.replace(/^.*\.([a-zA-Z]+)\([^()]*\)[^ ()]*$|.*/,'$1');
return s?s:'find';
}
Il a été utilisé ici: http://www.jsfiddle.net/naugtur/rdEAu/