javascript - 如何让我的 jQuery 插件尊重 end()?

标签 javascript jquery jquery-plugins jquery-selectors

对于大多数更改选择的 jQuery 函数调用,可以使用 end 返回选择中的一个步骤。 .例如:

$('#myElement').parent().show().end().css('color', '#ff0000');

这显示了父元素,然后使原始选择变为红色。

但是,当我定义自己的过滤选择的 jQuery 插件时,我没有获得此功能。例如:

$.fn.nextBarOne = function(selector) {
    var ret = this.next().next();

    return (typeof selector === 'undefined') ? ret : ret.filter(selector);
}

如果我现在执行 $('#myElement').nextBarOne().show().end() 我不会返回到原始选择。显然,这是因为函数内部调用了两次 next,然后有时调用了 filter

我如何定义一个 jQuery 插件来允许我像内置函数一样使用 end

最佳答案

使用.next()遍历后设置prevObject指向原来的jQuery对象。

$.fn.nextBarOne = function(selector) {
    var self = this,
        ret = (typeof selector === 'undefined') ? 
                this.next().next() : this.next().next().filter(selector);
    ret.prevObject = self; 
    return ret;
}

编辑:

pushStack() 可能更干净。我还在 pushStack 调用中包含了选择器。

$.fn.nextBarOne = function(selector) {
    var ret = (typeof selector === 'undefined') ? 
                this.next().next() : this.next().next().filter(selector);
    return this.pushStack(ret, "nextBarOne", selector || "");           
}

An example here

关于javascript - 如何让我的 jQuery 插件尊重 end()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4939010/

相关文章:

javascript - 使用 angularjs 显示按类别排序的图像网格

javascript - 如何在 JQuery/JavaScript 中取消选中一组复选框

javascript - jQuery 检查是否单击左 ctrl + 左 shift 和左 ctrl + 右 shift

jquery - 下拉列表中的嵌套 optgroup 解决方案

javascript - Impress.js + 火狐浏览器 : How to disable advance slide on mouse click

javascript - 加载文档后获取当前运行的javascript文件名

javascript - 重新计算价格并重新附加货币

jquery - 对基本水平 Accordion 的建议

javascript - 从 puppeteer .innertext js 获取数据时遇到问题

javascript - 单击它们时如何使我的区域变暗?