压缩Javascript / jQuery代码

时间:2012-04-28 00:52:08

标签: javascript jquery

首先,我要感谢能帮助我压缩这段Javascript / jQuery代码的人。

        jQuery(function() {

            jQuery('#pitem-1').click(function(e) {
                jQuery("#image-1").lightbox_me({centered: true, onLoad: function() {
                    jQuery("#image-1").find("input:first").focus();
                }});

                e.preventDefault();
            });        

            jQuery('#pitem-2').click(function(e) {
                jQuery("#image-2").lightbox_me({centered: true, onLoad: function() {
                    jQuery("#image-2").find("input:first").focus();
                }});

                e.preventDefault();
            });

            jQuery('#pitem-3').click(function(e) {
                jQuery("#image-3").lightbox_me({centered: true, onLoad: function() {
                    jQuery("#image-3").find("input:first").focus();
                }});

                e.preventDefault();
            });

            jQuery('table tr:nth-child(even)').addClass('stripe');
        });

基本上每个#pitem-ID都会在弹出窗口中打开相同的#image-ID。

再次感谢任何可以提供帮助的人。

杰克

4 个答案:

答案 0 :(得分:4)

你的功能看起来几乎一样,这是一个线索,你应该将该功能转移到可以调用的东西:

function createHandler(id) {
    return function (e) {
        $(id).lightbox_me({centered: true, onLoad: function() {
            $(id).find("input:first").focus();
        }});

        e.preventDefault();
    }
};

然后你可以使用:

 $('#pitem-2').bind('click', createHandler("#image-2"));

答案 1 :(得分:3)

你可以:

  1. 使用公共事件处理程序将多个对象组合到选择器中
  2. 使用this来引用触发事件的对象
  3. 从生成事件的对象的id中导出图像ID。
  4. 这使您可以使用一段代码来处理所有三个对象的操作:

    jQuery(function() {
        jQuery("#pitem-1, #pitem-2, #pitem-3").click(function() {
            var image$ = $("#" + this.id.replace("pitem", "image"));
            image$.lighbox_me({centered: true, onLoad: function() {
                        image$.find("input:first").focus();
            }});
            e.preventDefault();
        });
        jQuery('table tr:nth-child(even)').addClass('stripe');
    });
    

答案 2 :(得分:2)

$('[id^="pitem-"]').click(function(e) {
    var numb = this.id.split('-')[1];
    $("#image-"+numb).lightbox_me({centered: true, onLoad: function() {
         $(this).find("input:first").focus();
    }
    });
    e.preventDefault();
});        

$('table tr:nth-child(even)').addClass('stripe');

答案 3 :(得分:0)

没有上下文很难说,但是每个pitem是否有必要拥有唯一的ID?为什么不使用CSS类而不是像这样的ID:

<div class="pitem">
<div id="image1"><img ... /></img>
</div>
...
<div class="pitem">
<div id="image3"><img ... /></img>
</div>

然后使用jQuery中的类选择器一次性添加所有这些的点击功能:

$(".pitem").click(function(e) {
  var currentItem = e.target;
  ...
  e.preventDefault();
});