2011-09-04 94 views
1

我寫了下面的jQuery,它完美地適用於我需要的東西。但我覺得它可以壓縮一點或縮短。我有點jQuery n00b很抱歉,如果它是明顯的...任何提示?謝謝!從一些jQuery修剪脂肪

jQuery(document).ready(function($){ 

var number = $("#tags-list a").length, 
    increment = 1/number, 
    opacity_num = ""; 

$($('#tags-list a').get().reverse()).each(function(i,el){ 
    el.id = i + 1; 
     opacity_num = el.id/number - increment; 
    $(this).css({ opacity: opacity_num }); 
     $(this).bind('mouseenter mouseleave', function() { 
      $(this).toggleClass('tag-hovering'); 
     }); 
}); 

});

note:jQuery(document).ready(function($)必須保持爲無衝突包裝。

+0

你能解釋一下你正在試圖做的,並提供你的HTML代碼是什麼?我不確定你在這裏做什麼。 –

回答

3

這是我能想到的最徹底的方法。我拿出了相反的結果,因爲它很醜陋,只是交換了邏輯,所以不需要。

我也將jQuery(document).ready(function($) {更改爲jQuery(function($) {,因爲他們做同樣的事情,第二個更短。

jQuery(function($) { 
    var items = $('#tags-list a'), 
     number = items.length; 

    items 
    .attr('id', function(i){ 
     return number - i; 
    }) 
    .css('opacity', function(i) { 
     return 1 - ((i + 1)/number); 
    }) 
    .hover(function() { 
     $(this).toggleClass('tag-hovering'); 
    }) 
}); 
+0

這種精益類型正是我試圖去的地方,但不幸的是它並不奏效。我確實喜歡這個代碼思想,並且會玩弄它......如果我能夠實現它,我會讓你知道。 – ggwicz

+0

您使用的是哪個版本的jQuery?使用這樣的函數設置值只能在jQuery 1.4中添加,所以如果你有一箇舊版本,它將不會工作。 – loganfsmyth

+0

我正在使用1.6.2 :)與只應該像1.5.x一樣低的系統一起工作 – ggwicz

1

未經測試,但應清晰閱讀,速度會更快。據我所知,每次你做$(「#tags-list a」)時,它都會進行查找(不管是否緩存)以及啓動一個函數。事情是,你可以保持引用,讓你直接與它最初提取的內容交互。當然,如果您爲#tags-list添加另一個'a'元素,它將不會更新,但是當您多次調用相同的數據時,它會更快。另外,$ .each在IE中很慢......所以你可以通過將它放在'for'循環中來加快速度。

jQuery(document).ready(function($){ 

    var i, el, tagList = $("#tags-list a").get(); 
    var number = tagList.length, 
     increment = 1/number, 
     opacity_num = ""; 

    var mouseCallback = function() { 
     $(this).toggleClass('tag-hovering'); 
    } 
    for(i = tagList.length - 1; i>=0; i++) { 
     el = tagList[i]; 
     el.id = i + 1; 
     $(el).css({opacity: el.id/number - increment}).bind('mouseenter mouseleave', mouseCallback); 
    } 
}); 

附註。我很少關心代碼的實際長度 - 我一直比較關心它的可讀性和執行效果。我可以把整個JavaScript應用程序放在一行,但爲什麼打擾它,使它無法維護?如果您想由於加載時間而縮短代碼長度,請在使腳本生效之前通過最小化工具運行它。

+0

感謝您的輸入。我喜歡你對代碼所做的事情,但是對於我的特定項目無法正常工作並記錄了一些錯誤。請注意,我同意你的代碼。我開始讓我的代碼非常容易閱讀和使用。我的意思是,我粘貼的代碼是我可以向我的媽媽解釋的哈哈。我不熟悉jquery的準系統,所以感謝幫助的人!我可能會像你說的那樣壓縮它。 – ggwicz

+1

沒問題 - 是的,我不得不面對的人有時誰使得看起來瘋狂複雜的代碼只是放線長度..只是沒有意義:) – Stephen

+0

哈哈,yikes。感謝幫助的人! – ggwicz

1
jQuery(document).ready(function($){ 
    var number = $("#tags-list a").length; 

    $($('#tags-list a').get().reverse()).each(function(i,el){ 
     el.id = i + 1;  
     $(this).attr('id', i+1) 
       .css({ opacity: i/number})   
       .bind('mouseenter mouseleave', function() {   
        $(this).toggleClass('tag-hovering');   
       }); 
    }); 
}); 

我想我做了我的數學,並清理了不透明度計算。還刪除了額外的$(this)鑄件,只是做了一些鏈接

編輯需要設置el.Id = i + 1;

+0

偷了Arnaud的想法,通過.attr設置id,而不是el.id = i + 1; – Prescott

+0

這與我的版本類似,但我無法使其工作。我嘗試了你建議的鏈接幫助,但它工作正常!謝啦。 +1 – ggwicz

1

未經測試:

jQuery(document).ready(function($) { 
    var number = $("#tags-list a").length; 
    $($('#tags-list a').get().reverse()).each(function(i,el) { 
    $(this).attr('id', i+1) 
      .css({ opacity: i/number) }) 
      .bind('mouseenter mouseleave', function() { 
      $(this).toggleClass('tag-hovering'); 
      }); 
    }); 
}); 
+0

謝謝你離開很多完整!我嘗試了這個,並沒有按照我的需要_exactly_工作。感謝與.bind的幫助,這很好。 – ggwicz