2016-08-31 5 views
-2

Я использую AngularJS, и у меня есть таблица, которую я заполняю, используя ng-repeat. Проверьте этот короткий пример:Как подсчитать количество строк, содержащих определенное значение?

http://jsfiddle.net/sso3ktz4/

Как проверить, сколько строк я с определенным значением? Например, в приведенной выше скрипте, как я могу проверить, сколько строк у меня есть со словом «второй»? Он должен вернуть «3».

Предпочтительные ответы на AngularJS, хотя у меня также есть JQuery.

Спасибо!

+2

Пожалуйста, всегда включают в себя код в вопросе –

+0

с использованием jQuery '$ ('table td: contains (second)'). Length' – jcubic

+0

Вы пробовали мой код для Angular? –

ответ

1

обновленный код контроллера ниже, где $ scope.findRowCount требуется функцию

var myApp = angular.module('myApp', []).controller('MyCtrl', MyCtrl); 

function MyCtrl($scope) { 
    $scope.items = [{ 
     name: 'first', 
     examples: [{ 
      name: 'first 1' 
     }, { 
      name: 'first 2' 
     }] 
    }, { 
     name: 'second', 
     examples: [{ 
      name: 'second' 
     }, { 
      name: 'second' 
     }] 
    }]; 


    $scope.findRowCount=function(value){ 

    var count=0; 
    angular.forEach($scope.items, function(item, i){ 
    if(item.name==value){ 

     count=count+1; 


    } 
    angular.forEach(item.examples, function(exp, j){ 

    if(exp.name==value){ 

     count=count+1; 


    } 

    }) 




    }); 
    console.log("count"+count); 
    return count; 
    } 

    var result=$scope.findRowCount("second"); 
    console.log(result); 
} 

http://jsfiddle.net/p3g9vyud/

+0

Спасибо! Это сработало отлично. –

1

Попробуйте этот путь

var myApp = angular.module('myApp', []).controller('MyCtrl', MyCtrl); 
 

 
function MyCtrl($scope) { 
 
    $scope.items = [{ 
 
     name: 'first', 
 
     examples: [{ 
 
      name: 'first 1' 
 
     }, { 
 
      name: 'first 2' 
 
     }] 
 
    }, { 
 
     name: 'second', 
 
     examples: [{ 
 
      name: 'second' 
 
     }, { 
 
      name: 'second' 
 
     }] 
 
    }]; 
 
    //Get sum based on the label 
 
    $scope.getTotalByLabel = function(keyword) 
 
    { 
 
    $scope.totalSecond = 0; 
 
    angular.forEach($scope.items, function(value, key) { 
 
     if(value.name == keyword) 
 
     { 
 
      $scope.totalSecond += 1; 
 
     } 
 
     angular.forEach(value.examples, function(val, k) { 
 
      if(val.name == keyword) 
 
      { 
 
      $scope.totalSecond += 1; 
 
      } 
 
     }); 
 
    }); 
 
    return $scope.totalSecond; 
 
    } 
 
}
th, 
 
td { 
 
    padding: 7px; 
 
    text-align: left; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
<div ng-controller="MyCtrl"> 
 
    <table border="1"> 
 
     <tbody ng:repeat="i in items"> 
 
      <tr> 
 
       <td>{{i.name}}</td> 
 
       <td>{{$index}}</td> 
 
      </tr> 
 
      <tr ng:repeat="e in i.examples"> 
 
       <td>{{e.name}}</td> 
 
       <td>{{$index}}</td> 
 
      </tr> 
 
     </tbody> 
 
    </table> 
 
    <b>Total of second</b>: {{getTotalByLabel('second')}} 
 
</div> 
 
</div>

+0

Спасибо! Это почти делает то, что я хотел, но я не хочу, чтобы результат был в HTML, но в JavaScript. Ответ @Jekin Kalariya делает именно то, что я хочу. Но я благодарю вас за ваши усилия, пытаясь помочь мне. –

+0

@ T.Ferreira ваш прием, мой код также имеет результат в java-скрипте в форме этой переменной. $ scope.totalSecond –

Смежные вопросы