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 に答える