このタイプの機能が必要になった場合に備えて、現在のソリューションはこの要点に存在し ます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
}
}
しかし、上記のコードのスニペットは機能しませんでした