2012-02-15 3 views
1
ここ

は私の関数である。このjQuery関数をどのようにクリーンアップしてより柔軟にすることができますか?

function DisplayGridElementsBasedOnCriteria(dataItem, propertyToEvaluate, shouldEqualvalue, selectorsToChange, hideSelectedElements, nameOfColumnContainingElements) { 
if (propertyToEvaluate == shouldEqualvalue) { 
    var $row = $(dataItem.row); 
    if (nameOfColumnContainingElements == undefined) { 
     if (hideSelectedElements) { 
      $row.children("td").children(selectorsToChange).hide(); 

     }else { 
      $row.children("td").children(selectorsToChange).show(); 
     } 
    } else { 
     $.each($row.children("td"), function (index, column) { 
      var $column = $(column); 
      var $headerText = $column.closest('table').find('th').eq($column.index()).children(".t-link").text(); 
      if ($headerText == nameOfColumnContainingElements) { 
       if (hideSelectedElements) { 
        $column.children(selectorsToChange).hide(); 
       } else { 
        $column.children(selectorsToChange).show(); 
       } 
      } 

     }); 
    } 

} 

}ように使用されている

:私はjQueryの/ JavaScriptのでは非常に良好ではないですし、それはように動作します

<script type="text/javascript"> 
    function onRowDataBound(e) { 
     DisplayGridElementsBasedOnCriteria(e, e.dataItem.Status, "Submitted", "a.t-grid-delete, a.t-grid-Edit", true, "Actions"); 
    } 
</script> 

Iほんの少し複雑で肥大しているようです。

誰でももっとクリーンアップ版を提供できますか?掃除用として

function DisplayGridElementsBasedOnCriteria(dataItem, propertyToEvaluate, shouldEqualvalue, selectorsToChange, hideSelectedElements, nameOfColumnContainingElements) { 
if (propertyToEvaluate === shouldEqualvalue) { 
    var $row = $(dataItem.row); 

    if (nameOfColumnContainingElements === undefined) { 
      $row.children("td").children(selectorsToChange).toggle(!hideSelectedElements); 
    } 
    else { 
     $row.children("td").each(function (index, column) { 
      var $column = $(column), 
       $headerText = $column.closest('table').find('th').eq($column.index()).children(".t-link").text(); 

      if ($headerText === nameOfColumnContainingElements) { 
        $column.children(selectorsToChange).toggle(!hideSelectedElements); 
      } 

     }); 
    } 
} 

}

答えて

2

  • あなたはif/else条項に代わり.show/.hide.toggle(bool)を使用することができ、ここで答えパー

    はクリーンバージョンです。

  • varvar a = 1, b = 2のようにチェーンすることができます。
  • JavaScriptの癖を避けるには、===を使用します。
  • $.each($(...)の代わりに$(...).eachを使用できます。
+0

私の例に関連してチェーンバールとはどういう意味ですか、どこに適用しないのですか? – SventoryMang

+0

@DOTang: 'var $ column'と' var $ headerText'を組み合わせることができます。 – pimvdb

+0

おかげさまで、2番目の部分を取り除きました。本当に別の質問ですが、これは非常に役に立ちました! – SventoryMang

関連する問題