gpt4 book ai didi

javascript - 在/作为高阶函数中使用 jQuery 函数

转载 作者:行者123 更新时间:2023-11-28 08:48:01 26 4
gpt4 key购买 nike

我试图在高阶函数中使用 $.fn.show (和其他 jQuery 函数)。

我最初想要的是一个函数,将给定函数应用于由应用于给定元素的其他函数集合返回的所有元素。看起来像这样的东西:

function mapOn( func, genratingFunc, element ){
$(generatingFuncs).each(function(){
var buf = $(element);
while(buf.length){ // run as long as elements are returned
func(buf);
buf = this(buf);
}
});
}

我需要这样一个函数,以一种方便、富有表现力的方式将一些函数应用于几个 DOM 节点及其父节点和/或子节点。假设我们要隐藏 ID 为 hideMyFamily 的节点及其子节点。我不知道用 jQuery 有什么方便的方法来做到这一点,所以我在 $("#hideMyFamily").children()$("#hideMyFamily"上运行 hide() ").children().children() 依此类推,直到集合的长度为 0(以及 $("#hideMyFamily") 本身当然)。
问题是,运行 mapOn( $.fn.show, [$.fn.children], $("#hideMyFamily") ) 不会完成这项工作,因为你显然不能只应用 $.fn.show 到元素/集合。

所以我想到的是:

对于每个 jQuery 函数,我需要指定另一个函数(在全局范围内),如下所示:

function _show(e){ $(e).show(); }

对于 jQuery 的每个“生成”函数,我指定了另一个“解决函数”:

function _id(e){ return $(e); }
function _children(e){ return $(e).children(); }

然后我可以指定我的“multiMap”函数,如下所示:

function multiMap(func, generators, elem){
$(generators).each(function(){
var buf = $(elem);
var buf2 = [];
while (buf.length && buf[0] !== buf2[0]) {
func(buf);
buf2 = buf;
buf = this(buf);
}
});
}

现在我可以运行我方便的函数 multiMap(_show, [_id, _children], "hideMyFamily") 来隐藏元素本身及其所有子元素。

现在,言归正传,我的问题是:是否有更优雅的方式来实现所需的行为?是否有任何我没有考虑到的 jQuery 魔法?

tl;dr 有没有一种方便的方法可以在节点/集合上使用 jQuery 的函数(例如 show() 和 hide()),就像 $.fn.show( $("someElements") )?

最佳答案

是的,这是可能的。您可以执行$.fn.show.call($("some-elements"))

我还没有完全浏览您更详细的示例,但这似乎就是您正在寻找的。对于最后一个示例,您可以将其写为:

multiMap($.fn.show, [_id, _children], "hideMyFamily")

然后在 mutliMap 中执行 f.call 或类似的操作,我相信这会起作用。

关于javascript - 在/作为高阶函数中使用 jQuery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19523409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com