使用.each()跨函数使用变量

时间:2012-10-18 11:11:44

标签: jquery variables truncate

我正在尝试截断div标头。我的功能是错误的,因为我相信可变范围。

这是我的功能细分:

  
      
  1. 设置变量以使它们的范围正确
  2.   
  3. 遍历每个div:   
        
    • 保存长标题
    •   
    • 创建截断的标题
    •   
    • 设置截断标题
    •   
  4.   
  5. 在鼠标输入时,使用完整标题
  6.   
  7. 在鼠标离开时,使用截断标题
  8.   

如何重新排列此功能以使变量正确传输?

jQuery(document).ready(function($) {
    eventHover();
}); 


function eventHover(){

    // Set var scope
    var title = '';
    var shortText = '';
    var longText = '';

    // Change long titles to short version
    $('#event_promo .panel').each( function() {
        title = $(this).find($('h3 a'));
        longText = title.html();

        shortText = jQuery.trim(longText).substring(0, 50)
            .split(" ").slice(0, -1).join(" ") + "...";

        title.html(shortText);
    }); 

    // Add hover class and change title to long version
    $('#event_promo .panel .trigger').mouseenter(function () {
        $(this).parent().addClass('hover');
        title.html(longText);
    });

    // Remove hover class and revert title to short version
    $('#event_promo .panel .trigger').mouseleave(function () {
        $(this).parent().removeClass('hover');
        title.html(shortText);
    });

}

1 个答案:

答案 0 :(得分:2)

我建议使用data()方法而不是“全局”变量:

$('#event_promo .panel').each( function() {

    var $title = $(this).find('h3 a');
    var longText = title.html();

    var shortText = jQuery.trim(longText).substring(0, 50)
        .split(" ").slice(0, -1).join(" ") + "...";

    $title.html(shortText);

    $(this).data({ shortText: shortText, longText: longText });
}); 

处理数据:

$('#event_promo .panel .trigger').mouseenter(function () {

    var longText = $(this).closest('.panel').data('longText');
    var shortText = $(this).closest('.panel').data('shortText');

    //do stuff with the texts here

});