我刚刚被要求为我们的某个网站编写一个小新闻自动收录器脚本,因此我重新编写了一个现有的jQuery脚本以满足我们的需求。之后我被告知他们使用Prototype而不是jQuery,所以现在我必须转换脚本。
我将能够使用Prototype文档找到大多数简单部分,但jQuery中有一些我不熟悉的部分。我主要谈论的是:
(function($) {
$.fn.newsTicker = $.fn.newsticker = function(delay)
{
delay = delay || 4000;
initTicker = function(el)
{
//bla bla some stuff
};
//here be more functions
this.each(
function()
{
if(this.nodeName.toLowerCase()!= "ul") return;
initTicker(this);
}
);
};
和
$.newsticker = $.newsTicker =
{
pause: function(el)
{
(el.jquery ? el[0] : el).pause = true;
},
//more functions
}
})(jQuery);
这些类是什么?我不知道$(#element).newsTicker()
如何激发正确的功能。这是如何工作的,更重要的是它在Prototype中转化为什么?
答案 0 :(得分:2)
我无法帮助您使用Prototype端口,但这是原始代码的工作方式。
这些类是什么?一世 不要得到$(#element).newsTicker() 激发正确的功能。
在jQuery中,你有一个全局对象,通常别名为$
,它包含你可以使用的所有函数(“特性”)。这些功能是可扩展的:您可以将自己的功能添加到全局对象中,如果您正确执行它,它将无法与任何其他jQuery内置函数区分开来。如果你以可重用的方式进行,你就编写了一个插件。这就是代码的作用:
$.fn.newsTicker = $.fn.newsticker = function(delay){
}
它创建一个接受delay
参数的jQuery方法。 (实际上,它定义了两次,所以你可以拼错这个名字。)你现在可以做这样的事情:
$("#main div.ticker").newsticker(2000);
现在这个:
(function($) {
// ...
})(jQuery);
$
别名只是一种约定,可以使用或不可用。这段代码定义了一个未命名的函数,它接收jQuery
全局对象并将其存储在名为$
的局部变量中。这样,您就可以确定$
存在,并且它与可能存在的任何其他$
变量不冲突。
.fn与没有的函数有什么区别?
jQuery.fn
是插件的特殊对象。我不知道如果你在其他任何地方添加你的功能会发生什么(它可能按预期工作或没有,我还没有测试过)但这是最好的做法。您可以将其视为命名空间:放置在那里的东西不会干扰其他任何东西。
参考:http://docs.jquery.com/Plugins/Authoring
BTW,一个正确编写的插件允许你将它插入jQuery链的中间,例如:$("#main div.ticker").css("color: red").newsticker(2000).fadeIn("slow");
答案 1 :(得分:1)
你不能像扩展jQuery一样扩展Prototype。 jQuery有一个主要的对象,一切都在一起,Prototype有多个全局对象...... Doesent大大扩展了Prototypes Objects,所以如果你有一个纯粹的js版本(我认为你有,根据你的帖子),使用那个......
确保支持Prototype选择器(最简单的方法可能是使用Prototypes $函数)
编辑:对不起,我以为你写过用纯js脚本制作一个jquery插件。 但在这种情况下,请考虑使用jQuery.noConflict - 使用jQuery和Prototype。 没有简单的方法将jQuery插件转换为Prototype ......