2012-02-15 43 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