代码之家  ›  专栏  ›  技术社区  ›  naugtur

我可以访问链中最后使用的遍历操作的名称吗?

  •  4
  • naugtur  · 技术社区  · 14 年前

    我想知道是否有可能找到创建当前元素数组的方法的名称。

    我试图在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'
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   BBonifield    14 年前

    这个例子并不完美,但它提取了许多情况下的最后一个操作(find、filter、children、next)- http://jsfiddle.net/X7LmW/3/ 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;
        }
    }
    
        2
  •  0
  •   naugtur    14 年前

    赏金是为了找到路。

    $.fn.lastop=function(){
    var s=this.selector.replace(/^.*\.([a-zA-Z]+)\([^()]*\)[^ ()]*$|.*/,'$1');
    return s?s:'find';
    }
    

    http://www.jsfiddle.net/naugtur/rdEAu/