我有一个使用轮询更新项目的跑马灯。我编写了一个简单的jQuery插件,可以像这样调用:
$("#cont ul").ticker();
这将一个ul转换为一个ticker,通过li滚动。要添加新项目,我必须向ul添加lis,这很好用。然而,我希望我可以在ticker对象上有一个addItem函数,但是我不想失去jQuery使用的链式连接性。
有没有一种比将“ul”添加到列表中更明显,但与jQuery处理事物的方式相匹配的方法?
我有一个使用轮询更新项目的跑马灯。我编写了一个简单的jQuery插件,可以像这样调用:
$("#cont ul").ticker();
这将一个ul转换为一个ticker,通过li滚动。要添加新项目,我必须向ul添加lis,这很好用。然而,我希望我可以在ticker对象上有一个addItem函数,但是我不想失去jQuery使用的链式连接性。
有没有一种比将“ul”添加到列表中更明显,但与jQuery处理事物的方式相匹配的方法?
jQuery并不是真正的面向对象解决方案,所以你说它不是真正的“jQuery方式”是正确的。我听说Prototype全都是关于面向对象的,所以你可能想有一天去研究一下它。
虽然没有任何理由不能向jQuery对象添加另一个函数:
$.fn.addTickerItem = function(contents) {
this.append(
$("<li></li>").html(contents);
);
return this;
};
...但你会慢慢污染命名空间。
你应该做的是扩展插件的设置:
jQuery.ticker = function(settings)
{
var settings =
jQuery.extend(
{
action : create ,
item : $(this)
}
,settings);
return $(this).each(function(){
if(settings.action == create )
{
//initialize ticker..
}
else if(settings.action == add )
{
//add to ticker.
}
}//end each.
}//end plugin.
$( #ticker ).ticker(); //this will initialize it, no problem.
var settings1 = { action : add , item : $(expr1) }
$( #ticker ).ticker(settings1);//this will execute the "add" action.