jquery - 减少 jQuery 代码行数,避免不必要的重复

标签 jquery

我希望能够减少以下代码中的重复,当您单击编号链接时,该代码会更改图像源以及 div 的背景图像。

我在想,既然我以相同的方式对变量和选择器进行了编号(1、2、3...),我可以用更少的行重写点击功能部分,以避免每次更改数字时都必须更改它图像?也许点击函数可以得到它自己的类(例如2)并将其应用到其他行?

图像(可以是任意数量)

var image1 = 'Home.jpg';
var image2 = 'About.jpg';
var image3 = 'Contact.jpg';

点击功能(目前重复覆盖上面所有图片)

$('.1').click(function() {
   $("#image").attr('src', image1);
   $('#center').css('background', 'url(' +  image1 + ') no-repeat center top');
});
$('.2').click(function() {
   $("#image").attr('src', image2);
   $('#center').css('background', 'url(' +  image2 + ') no-repeat center top');
});
$('.3').click(function() {
   $("#image").attr('src', image3);
   $('#center').css('background', 'url(' +  image3 + ') no-repeat center top');
});

HTML

<a href="#" class="1">Option 1</a>
<a href="#" class="2">Option 2</a>
<a href="#" class="3">Option 3</a>

您可以在此处查看正在运行的代码:http://carolineelisa.com/zack/

任何有关使其更小且更易于更新的建议将不胜感激!

最佳答案

var images = ['Home.jpg', 'About.jpg', 'Contact.jpg'];

$.each(images, function(index, image) {
  var imageIndex = index + 1; 
  $('.' + imageIndex).click(function() {
    $("#image").attr('src', image);
    $('#center').css('background', 'url(' +  image + ') no-repeat center top');
  });
});

您可能还想在附加点击处理程序之前调用 $.append() 为每个图像动态创建 HTML。如果您选择生成 HTML 服务器端,那么您将需要找到一种方法来避免在客户端和服务器端重复图像数组。

关于jquery - 减少 jQuery 代码行数,避免不必要的重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7008094/

相关文章:

javascript - 旋转 div 从左侧位置偏移顶部位置

jquery - 即使出现服务错误,主干模型也会被破坏

javascript - HTML5 范围输入值在 Bootstrap 弹出框内没有改变

javascript - 使 iframe 内容溢出到 iframe 范围之外

javascript - 具有少量特殊字符的字符串的有效正则表达式

javascript 到 jquery 的代码转换,该代码对于带有单选按钮的文本字段的动态外观和消失效果很好

jquery - 通过切换动画问题

javascript - 在 select2 中捕获回车键

javascript - JavaScript 中未终止的字符串文字

javascript - Bootstrap 模式未显示,但背景出现