チェーン内の最後に使用されているトラバース操作の名前にアクセスできますか?

StackOverflow https://stackoverflow.com/questions/3764794

  •  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;
    }
}

他のヒント

バウンティは、道を見つけるために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/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top