gpt4 book ai didi

javascript - 使用 jQuery 方法作为回调参数

转载 作者:行者123 更新时间:2023-11-29 20:22:39 26 4
gpt4 key购买 nike

我有这个小 jQuery 插件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
(function($){
$.fn.foo = function(options){
var options = $.extend({
text: "Foo!",
}, options
);

this.prepend(
$("<span></span>").text(options.text)
).css({color: "white", backgroundColor: "black"});

return this;
};
})(jQuery);


$(function(){
$("div").foo().foo({text: "Bar!"}).css({border: "1px solid red"});
});
//--></script>
</head>
<body>

<div>One</div>
<div>Two</div>
<div>Three</div>

</body>
</html>

现在我想改进它,以便您能够通过提供回调函数来控制插入文本的位置:

$(function(){
var optionsFoo = {
text: "Foo!",
insertionCallback: $.append
}
var optionsBar = {
text: "Bar!",
insertionCallback: $.prepend
}
$("div").foo(optionsFoo).foo(optionsBar).css({border: "1px solid red"});
});

(请记住这只是示例代码。我想学习一种技术而不是解决问题。)

我可以将 jQuery 方法作为参数传递并在链中间的插件中使用它吗?如果是这样,语法是什么?如果不是,推荐的替代方案是什么?

更新:到目前为止我的进度

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
(function($){
$.fn.foo = function(options){
var options = $.extend({
text: "Foo!",
insertionCallback: $.append
}, options
);

options.insertionCallback.call(this, // options.insertionCallback is undefined
$("<span></span>").text(options.text)
).css({color: "white", backgroundColor: "black"});

return this;
};
})(jQuery);


$(function(){
var optionsFoo = {
text: "Foo!",
insertionCallback: $.append
}
var optionsBar = {
text: "Bar!",
insertionCallback: $.prepend
}
$("div").foo(optionsFoo).foo(optionsBar).css({border: "1px solid red"});
});
//--></script>
</head>
<body>

<div>One</div>
<div>Two</div>
<div>Three</div>

</body>
</html>

最佳答案

当然可以,JavaScript 确实是动态的:

    this.prepend(
$("<span></span>").text(options.text)
).css({color: "white", backgroundColor: "black"});

您可以将对 this.prepend() 的 native 调用替换为您在选项对象中作为参数传递的 jQuery 函数。

由于大多数 jQuery 方法都作用于当前的一组元素(插件中的 this 对象),因此您需要使用 applycall让它工作。这样您就可以调用 options.insertionCallback 函数,将当前 this 对象作为其上下文。

类似于:

    options.insertionCallback.call(this, // pass the current context to the jQuery function
$("<span></span>").text(options.text)
).css({color: "white", backgroundColor: "black"});

编辑

但是您不能直接从$ 命名空间访问jQuery 方法,您需要一个构造的jQuery 对象来访问它的方法,或者简单地使用$.fn.functionName正如 Nick Craver 指出的那样。

alert($.prepend); // won't alert the function

alert($.fn.prepend); // will alert the function

关于javascript - 使用 jQuery 方法作为回调参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211611/

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