2014-10-11 40 views
0

我是新来的jQuery - 所以我道歉,如果这是一个愚蠢的问题:)的jQuery - 添加代码的功能,简化(停止重复类似的东西)

我一直在挑战与使代码我团队使用简单到足够少的“熟练”人员来更新它。

我为所有需要改变的事物设置了变量,它按照我的预期工作。

我唯一的疑问是,我会一遍又一遍地运行相同的4件事,我觉得我可以实现我想要的功能?

下面是它在行动小提琴有3米不同的横幅:http://jsfiddle.net/8ez46mpg/

我重复了好几次了,针对不同的横幅:

var $primaryBanner1 = $('#banner-01'); 
$primaryBanner1.attr('title', primaryOneTxt); 
$primaryBanner1.html("<h2>" + primaryOneTxt + "</h2>"); 
$primaryBanner1.attr('href', primaryOneUrl); 
$primaryBanner1.css("background", "url("+primaryOneImg+")"); 

有什么办法,我可以简化成这样功能更小?而不是相同的4行,每页最多15次?

任何帮助都会非常棒!

谢谢!

+0

每一个jQuery对象返回本身,所以你可以很容易CONCAT他们:$ primaryBanner1.attr(...)HTML(...)等 – Freddy 2014-10-11 20:52:39

+0

我就提到,如果这是工作的代码你想改进,[codereview.se]可能更适合这个问题。 – 2014-10-11 20:57:36

+0

谢谢大卫!我真的不知道这存在! – Nick 2014-10-11 21:03:48

回答

3

只需制作一个执行重复动作并传入动态变量的函数即可。

function styleBanner(selector, txt, url, img){ 
    var $el = $(selector); 
    $el.attr({ 
    title: txt, 
    href: url 
    }).css('background', 'url('+img+')') 
    .html('<h2>'+txt+'</h2>'); 

    return $el; 
} 

var $primaryBanner1 = styleBanner('#banner-01', primaryOneTxt, primaryOneUrl, primaryOneImg); 
+0

我还建议将所有参数(txt,url,img)添加到选项对象{txt:'text',url:'url'},从而使未来更容易扩展。 – n0mercy 2014-10-11 20:57:52

+0

太棒了!感谢您的帮助Rob!我不太确定你的意思@ n0mercy? – Nick 2014-10-11 21:02:53

+0

我已经更新了您的第一个示例脚本,以阐明我的建议http://jsfiddle.net/20jmfapm/1/ – n0mercy 2014-10-11 21:10:15