2012-02-15 19 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(); 
       } 
      } 

     }); 
    } 

} 

}

它以這樣一種方式被使用:

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

我不是在jQuery的/ JavaScript的非常好,它的工作方式我想要,但似乎有點複雜和臃腫。

任何人都可以提供一個更清潔的版本?

每這裏的答案是清潔的版本:

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

至於清理:

  • 您可以使用.toggle(bool)代替.show/.hideif/else條款。
  • 您可以連鎖var s像var a = 1, b = 2
  • 您可能想使用===來避免JavaScript的怪癖。
  • 您可以使用$(...).each而不是$.each($(...)
+0

什麼意思是由鏈變量參考我的例子,沒有看到在哪裏應用它? – SventoryMang 2012-02-15 20:09:46

+0

@DOTang:可以合併「var $ column」和「var $ headerText」。 – pimvdb 2012-02-15 20:10:39

+0

謝謝,擺脫了第二部分,因爲它是一個單獨的問題,這是非常有幫助的! – SventoryMang 2012-02-15 20:18:02