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

发布于 2024-09-24 09:04:18 字数 490 浏览 5 评论 0原文

我想知道是否可以获取创建当前元素数组的方法的名称。

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

I was wondering if it's possible to get to the name of the method that created a current array of elements.

I tried to find it in the jquery object itself, but I don't see a place where it could be stored.

Try to fill this in

$.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'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

岁吢 2024-10-01 09:04:18

这个示例并不完美,但它提取了许多情况下的最后一个操作(查找、过滤、子级、下一个) - 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;
    }
}

This example isn't perfect, but it extracts the last operation for many situations (find, filter, children, next) - http://jsfiddle.net/X7LmW/3/ . Based off of the internals of 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;
    }
}
把时间冻结 2024-10-01 09:04:18

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/

Bounty goes to BBonified for finding the way.

This is my upgrade on the last_operation function. $() is recognized as .find() on purpose.

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

This was used here: http://www.jsfiddle.net/naugtur/rdEAu/

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文