1

我正在尝试简化以下脚本。条件语句似乎是多余的这里有人帮助我吗?非常感谢。

function createHelpImage(element, elementType){

  $element = $(element);
  if(elementType=='img'){

    $(document.createElement('img'))
    .attr({src:'inc/images/help_bubble.png', title:'help Image', 'class': 'helpImg'})
    .insertBefore($element)
    .css({'position':'absolute',
      'z-index':999
    })
    .position({
      my: 'left bottom',
      at: 'left center',
      of: $element

    });
  }else{
    $(document.createElement('img'))
    .attr({src:'inc/images/help_bubble.png', title:'help Image', 'class': 'helpImg'})
    .prependTo($element)
    .css({'position':'absolute',
      'z-index':999
    })
    .position({
      my: 'left bottom',
      at: 'left center',
      of: $element[0]

    });
  }
}
4

3 回答 3

2

尝试在最后一行使用三元运算符:

 of: (elementType=='img') ? $elemen : $elemen[0]

这是假设您的 if/else 代码块中只有最后一行不同。您的代码如下所示:

function createHelpImage(element, elementType){
    $(document.createElement('img'))
    .attr({src:'inc/images/help_bubble.png', title:'help Image', 'class': 'helpImg'})
    .insertBefore($element)
    .css({'position':'absolute',
      'z-index':999
    })
    .position({
      my: 'left bottom',
      at: 'left center',
      of: (elementType=='img') ? $element : $element[0]
    });  
}
于 2012-08-15T23:33:45.967 回答
1

只需从 if/else 中删除冗余代码,使用变量来保存值,of然后在之后设置它

$element = $(element);
var of;
var img = $(document.createElement('img'))
    .attr({src:'inc/images/help_bubble.png', title:'help Image', 'class': 'helpImg'})       
    .css({'position':'absolute',
       'z-index':999
    })
if(elementType=='img'){
    img.insertBefore($element);
            of = $element;
}
else{
    img.prependTo($element);
            of = $element[0];
}
img.position({
    my: 'left bottom',
    at: 'left center',
    of: of
});
于 2012-08-15T23:33:01.167 回答
0

只需考虑差异并将 if 语句放在那些周围。有一个原则叫做 Don't Repeat Yourself(简称 DRY),适用于此。

于 2012-08-15T23:33:05.560 回答