gpt4 book ai didi

javascript - 覆盖 jQuery .end() 方法以接受参数

转载 作者:行者123 更新时间:2023-11-30 10:31:39 25 4
gpt4 key购买 nike

更新当前的解决方案以这个要点为基础,以防您需要这种类型的功能 https://gist.github.com/jdaly13/5581538#file-gistfile1-js

我正在尝试一些小实验,尝试用我自己的方法重写 jQuery 的核心结束方法,该方法本质上只是向其添加功能

例如,如果您正在使用 jQuery,您可能会这样做

$('h1.clickme').click(function () {
$(this).next('div').css("width", "+=200").parent().next().hide().end().end()
//this should traverse you back to the div after the h1 clicked
})

我想通过添加添加数字参数的能力来覆盖 jQuery end 方法例如

.end(1) 

会做同样的事情

.end().end()

这是我目前的情况

(function(){

// Define overriding method.
jQuery.fn.end = function(no_of_times){
var prevObject = "prevObject";
if (!(arguments.length) || (typeof no_of_times !== "number")) {
return this.prevObject || this.constructor(null);
} else {
if (no_of_times == 1) {
return this.prevObject.prevObject || this.constructor(null)
} else if (no_of_times == 2) {
return this.prevObject.prevObject.prevObject || this.constructor(null)
} else if (no_of_times == 3) {
return this.prevObject.prevObject.prevObject.prevObject || this.constructor(null)
} else {
//too many times can't type anymore
return this.prevObject || this.constructor(null);
}
}

}
})()

所以我可以这样调用

$('.promo-carousel').parent().prev().siblings('span').hide().end(2)

但显然我认为写出所有这些 if 语句效率不高有没有更简单的方法来做到这一点?我确定性能大致相同,但为了可读性,我这样做更多

我考虑过根据传递的参数将“prevObject”字符串附加到 prevObject 变量上

if (!(arguments.length) || (typeof no_of_times !== "number")) {
return this.prevObject || this.constructor(null);
} else {
for (i=0; i <= no_of_times; i++) {
pObj += "prevObject."
}
var prevObject = pObj.slice(0, prevObject.length -1)
console.log(prevObject);
return this.prevObject
}

}

但是上面那段代码没有用一如既往地感谢任何帮助

最佳答案

这应该可以解决问题:

var prevObject = this.prevObject;

for(i = 1; i<no_of_times; i++) {
prevObject = prevObject.prevObject;
if(!prevObject) {
prevObject = this.constructor(null);
break
}
}

每次循环迭代都获取prevObjectprevObject,直到找不到prevObject

关于javascript - 覆盖 jQuery .end() 方法以接受参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553357/

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