jQuery到Prototype,不确定一些jQuery部分

时间:2011-01-12 12:46:54

标签: jquery prototypejs

我刚刚被要求为我们的某个网站编写一个小新闻自动收录器脚本,因此我重新编写了一个现有的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中转化为什么?

完整脚本:http://jsfiddle.net/PXn4r/9/

2 个答案:

答案 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 ......