如何简化if语句代码

时间:2012-08-20 23:06:39

标签: jquery

我试图简化下面的线索,使它们不那么难看。有没有更好的方法来做到这一点?非常感谢。

//the only difference is the append and after method after the $element.
     if($element.is('td')){
            $element.append(
                  $(document.createElement('div')).attr({'id': tooltipId}).addClass('js-tutorialTooltips').css({
                      'position': 'absolute',
                      'z-index':'9999', 
                      'color':'white',
                      'background-color': 'rgba(0, 0, 0, 0.8)',
                      'border': '1px solid #cccccc',
                      'border-radius': '0.5em',
                      'box-shadow': '0 0.2em 0.2em #111'})
                    .append(
                      $(document.createElement('div')).css({'padding': '0.5em 1em'}).html(text) //for more tool info add the following + '<br/>(' + verticalPosition + '-' + horizontalPosition + ':' + domId + ')'
                   )
                )
        }else{
            $element.after(
                      $(document.createElement('div')).attr({'id': tooltipId}).addClass('js-tutorialTooltips').css({
                        'position': 'absolute',
                        'z-index':'9999',
                        'width':'300px',
                        'color':'white',
                        'background-color': 'rgba(0, 0, 0, 0.8)',
                        'border': '1px solid #cccccc',
                        'border-radius': '0.5em',
                        'box-shadow': '0 0.2em 0.2em #111'})
                    .append(
                           $(document.createElement('div')).css({'padding': '0.5em 1em'}).html(text)  //for more tool info add the following + '<br/>(' + verticalPosition + '-' + horizontalPosition + ':' + domId + ')'  
                    )
            );  
        }




//The only difference is  prependTo and insertBefore method.. 


        if($element.is('td')){

                       $(document.createElement('img'))
                            .attr({src:'inc/images/help_bubble.png', title:'help Image', 'class': 'helpImg'})
                            .prependTo($element)
                            .css({'position':'absolute',
                                   'z-index':999,
                                   'top': xPos,
                                   'left': yPos
                             })

                   return true;
               }

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

                                 })

3 个答案:

答案 0 :(得分:3)

使用[]语法,以便您可以使用动态函数名称:

var func = $element.is('td') ? "append" : "after";
$element[func](...);

另外,请考虑使用类名来定义CSS中的样式。这应该会使你的代码更加清晰。

答案 1 :(得分:2)

您添加的内容似乎相同,但添加方式有所不同,具体取决于您是否要添加td

var toAdd = $element.append(
                  $(document.createElement('div')).attr({'id': tooltipId}).addClass('js-tutorialTooltips').css({
                      'position': 'absolute',
                      'z-index':'9999', 
                      'color':'white',
                      'background-color': 'rgba(0, 0, 0, 0.8)',
                      'border': '1px solid #cccccc',
                      'border-radius': '0.5em',
                      'box-shadow': '0 0.2em 0.2em #111'})
                    .append(
                      $(document.createElement('div')).css({'padding': '0.5em 1em'}).html(text) //for more tool info add the following + '<br/>(' + verticalPosition + '-' + horizontalPosition + ':' + domId + ')'
                   )
                )

然后

if($element.is('td')){
    $element.append(toAdd)
else 
    $element.after(toAdd);

如果您要添加的内容不相同,则可以将css属性分解出来,然后在条件中修改它们。

var toAdd, cssProps = {/* defaultValues */};

if($element.is('td')){
    // tweak css props       
    toAdd  = $(document.createElement....
    $element.append(toAdd)
} else {
    // tweak css props2
    toAdd  = $(document.createElement....
    $element.after(toAdd);
}

答案 2 :(得分:1)

首先创建元素:

var element = $('<div/>').attr({'id': tooltipId}).addClass('js-tutorialTooltips').css({
                  'position': 'absolute',
                  'z-index':'9999', 
                  'color':'white',
                  'background-color': 'rgba(0, 0, 0, 0.8)',
                  'border': '1px solid #cccccc',
                  'border-radius': '0.5em',
                  'box-shadow': '0 0.2em 0.2em #111'})
                .append(
                  $('<div/>').css({'padding': '0.5em 1em'}).html(text) //for more tool info add the following + '<br/>(' + verticalPosition + '-' + horizontalPosition + ':' + domId + ')'
               );

if ($element.is('td')) {
  $element.append(element);
} else {
  $element.after(element);
}