2010-09-21 38 views
4

我想知道是否有可能获得创建当前数组元素的方法的名称。我可以访问链中上次使用的遍历操作的名称吗?

我试图找到它在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' 

回答

1

这个例子填补这不是完美的,但它提取很多情况下(查找,过滤器,儿童,旁边)上一次操作 - 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; 
    } 
} 
+0

具有更坚实的解决方案增加了新的jsfiddle链接,占包含空格以及类选择子查询。 – BBonifield 2010-09-22 04:24:00

+0

这是一个很好的概念证明。我会很满意地指出在哪里寻找它,所以这太棒了! – naugtur 2010-09-22 12:37:44

+0

PS。我没有接受答案,因为我在等待赏金选项弹出。 – naugtur 2010-09-23 07:48:21

0

赏金的内部的去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/

相关问题