function findRepeaterElement(repeater, exact, index, binding, using, rootSelector) {
  var matches = [];
  using = using || document;

  var rows = [];
  var prefixes = ['ng-', 'ng_', 'data-ng-', 'x-ng-', 'ng\\:'];
  for (var p = 0; p < prefixes.length; ++p) {
    var attr = prefixes[p] + 'repeat';
    var repeatElems = using.querySelectorAll('[' + attr + ']');
    attr = attr.replace(/\\/g, '');
    for (var i = 0; i < repeatElems.length; ++i) {
      if (repeaterMatch(repeatElems[i].getAttribute(attr), repeater, exact)) {
        rows.push(repeatElems[i]);
      }
    }
  }
  /* multiRows is an array of arrays, where each inner array contains
     one row of elements. */
  var multiRows = [];
  for (var p = 0; p < prefixes.length; ++p) {
    var attr = prefixes[p] + 'repeat-start';
    var repeatElems = using.querySelectorAll('[' + attr + ']');
    attr = attr.replace(/\\/g, '');
    for (var i = 0; i < repeatElems.length; ++i) {
      if (repeaterMatch(repeatElems[i].getAttribute(attr), repeater, exact)) {
        var elem = repeatElems[i];
        var row = [];
        while (elem.nodeType != 8 || (elem.nodeValue &&
            !repeaterMatch(elem.nodeValue, repeater))) {
          if (elem.nodeType == 1) {
            row.push(elem);
          }
          elem = elem.nextSibling;
        }
        multiRows.push(row);
      }
    }
  }
  var row = rows[index];
  var multiRow = multiRows[index];
  var bindings = [];
  if (row) {
    if (angular.getTestability) {
      matches.push.apply(
          matches,
          getNg1Hooks(rootSelector).$$testability.findBindings(row, binding));
    } else {
      if (row.className.indexOf('ng-binding') != -1) {
        bindings.push(row);
      }
      var childBindings = row.getElementsByClassName('ng-binding');
      for (var i = 0; i < childBindings.length; ++i) {
        bindings.push(childBindings[i]);
      }
    }
  }
  if (multiRow) {
    for (var i = 0; i < multiRow.length; ++i) {
      var rowElem = multiRow[i];
      if (angular.getTestability) {
        matches.push.apply(
            matches,
            getNg1Hooks(rootSelector).$$testability.findBindings(rowElem,
                binding));
      } else {
        if (rowElem.className.indexOf('ng-binding') != -1) {
          bindings.push(rowElem);
        }
        var childBindings = rowElem.getElementsByClassName('ng-binding');
        for (var j = 0; j < childBindings.length; ++j) {
          bindings.push(childBindings[j]);
        }
      }
    }
  }
  for (var i = 0; i < bindings.length; ++i) {
    var dataBinding = angular.element(bindings[i]).data('$binding');
    if (dataBinding) {
      var bindingName = dataBinding.exp || dataBinding[0].exp || dataBinding;
      if (bindingName.indexOf(binding) != -1) {
        matches.push(bindings[i]);
      }
    }
  }
  return matches;
}
function findRepeaterElement(repeater, exact, index, binding, using, rootSelector) {
  var matches = [];
  using = using || document;

  var rows = [];
  var prefixes = ['ng-', 'ng_', 'data-ng-', 'x-ng-', 'ng\\:'];
  for (var p = 0; p < prefixes.length; ++p) {
    var attr = prefixes[p] + 'repeat';
    var repeatElems = using.querySelectorAll('[' + attr + ']');
    attr = attr.replace(/\\/g, '');
    for (var i = 0; i < repeatElems.length; ++i) {
      if (repeaterMatch(repeatElems[i].getAttribute(attr), repeater, exact)) {
        rows.push(repeatElems[i]);
      }
    }
  }
  /* multiRows is an array of arrays, where each inner array contains
     one row of elements. */
  var multiRows = [];
  for (var p = 0; p < prefixes.length; ++p) {
    var attr = prefixes[p] + 'repeat-start';
    var repeatElems = using.querySelectorAll('[' + attr + ']');
    attr = attr.replace(/\\/g, '');
    for (var i = 0; i < repeatElems.length; ++i) {
      if (repeaterMatch(repeatElems[i].getAttribute(attr), repeater, exact)) {
        var elem = repeatElems[i];
        var row = [];
        while (elem.nodeType != 8 || (elem.nodeValue &&
            !repeaterMatch(elem.nodeValue, repeater))) {
          if (elem.nodeType == 1) {
            row.push(elem);
          }
          elem = elem.nextSibling;
        }
        multiRows.push(row);
      }
    }
  }
  var row = rows[index];
  var multiRow = multiRows[index];
  var bindings = [];
  if (row) {
    if (angular.getTestability) {
      matches.push.apply(
          matches,
          getNg1Hooks(rootSelector).$$testability.findBindings(row, binding));
    } else {
      if (row.className.indexOf('ng-binding') != -1) {
        bindings.push(row);
      }
      var childBindings = row.getElementsByClassName('ng-binding');
      for (var i = 0; i < childBindings.length; ++i) {
        bindings.push(childBindings[i]);
      }
    }
  }
  if (multiRow) {
    for (var i = 0; i < multiRow.length; ++i) {
      var rowElem = multiRow[i];
      if (angular.getTestability) {
        matches.push.apply(
            matches,
            getNg1Hooks(rootSelector).$$testability.findBindings(rowElem,
                binding));
      } else {
        if (rowElem.className.indexOf('ng-binding') != -1) {
          bindings.push(rowElem);
        }
        var childBindings = rowElem.getElementsByClassName('ng-binding');
        for (var j = 0; j < childBindings.length; ++j) {
          bindings.push(childBindings[j]);
        }
      }
    }
  }
  for (var i = 0; i < bindings.length; ++i) {
    var dataBinding = angular.element(bindings[i]).data('$binding');
    if (dataBinding) {
      var bindingName = dataBinding.exp || dataBinding[0].exp || dataBinding;
      if (bindingName.indexOf(binding) != -1) {
        matches.push(bindings[i]);
      }
    }
  }
  return matches;
}
function findRepeaterElement ( repeater , exact , index , binding , using , rootSelector ) { var matches = [ ] ; using = using || document ; var rows = [ ] ; var prefixes = [ 'ng-' , 'ng_' , 'data-ng-' , 'x-ng-' , 'ng\\:' ] ; for ( var p = 0 ; p < prefixes . length ; ++ p ) { var attr = prefixes [ p ] + 'repeat' ; var repeatElems = using . querySelectorAll ( '[' + attr + ']' ) ; attr = attr . replace ( / \\ / g , '' ) ; for ( var i = 0 ; i < repeatElems . length ; ++ i ) { if ( repeaterMatch ( repeatElems [ i ] . getAttribute ( attr ) , repeater , exact ) ) { rows . push ( repeatElems [ i ] ) ; } } } /* multiRows is an array of arrays, where each inner array contains
     one row of elements. */ var multiRows = [ ] ; for ( var p = 0 ; p < prefixes . length ; ++ p ) { var attr = prefixes [ p ] + 'repeat-start' ; var repeatElems = using . querySelectorAll ( '[' + attr + ']' ) ; attr = attr . replace ( / \\ / g , '' ) ; for ( var i = 0 ; i < repeatElems . length ; ++ i ) { if ( repeaterMatch ( repeatElems [ i ] . getAttribute ( attr ) , repeater , exact ) ) { var elem = repeatElems [ i ] ; var row = [ ] ; while ( elem . nodeType != 8 || ( elem . nodeValue && ! repeaterMatch ( elem . nodeValue , repeater ) ) ) { if ( elem . nodeType == 1 ) { row . push ( elem ) ; } elem = elem . nextSibling ; } multiRows . push ( row ) ; } } } var row = rows [ index ] ; var multiRow = multiRows [ index ] ; var bindings = [ ] ; if ( row ) { if ( angular . getTestability ) { matches . push . apply ( matches , getNg1Hooks ( rootSelector ) . $$testability . findBindings ( row , binding ) ) ; } else { if ( row . className . indexOf ( 'ng-binding' ) != - 1 ) { bindings . push ( row ) ; } var childBindings = row . getElementsByClassName ( 'ng-binding' ) ; for ( var i = 0 ; i < childBindings . length ; ++ i ) { bindings . push ( childBindings [ i ] ) ; } } } if ( multiRow ) { for ( var i = 0 ; i < multiRow . length ; ++ i ) { var rowElem = multiRow [ i ] ; if ( angular . getTestability ) { matches . push . apply ( matches , getNg1Hooks ( rootSelector ) . $$testability . findBindings ( rowElem , binding ) ) ; } else { if ( rowElem . className . indexOf ( 'ng-binding' ) != - 1 ) { bindings . push ( rowElem ) ; } var childBindings = rowElem . getElementsByClassName ( 'ng-binding' ) ; for ( var j = 0 ; j < childBindings . length ; ++ j ) { bindings . push ( childBindings [ j ] ) ; } } } } for ( var i = 0 ; i < bindings . length ; ++ i ) { var dataBinding = angular . element ( bindings [ i ] ) . data ( '$binding' ) ; if ( dataBinding ) { var bindingName = dataBinding . exp || dataBinding [ 0 ] . exp || dataBinding ; if ( bindingName . indexOf ( binding ) != - 1 ) { matches . push ( bindings [ i ] ) ; } } } return matches ; }
Find an element within an ng-repeat by its row and column.

@param {string} repeater The text of the repeater, e.g. 'cat in cats'.
@param {boolean} exact Whether the repeater needs to be matched exactly
@param {number} index The row index.
@param {string} binding The column binding, e.g. '{{cat.name}}'.
@param {Element} using The scope of the search.
@param {string} rootSelector The selector to use for the root app element.

@return {Array.<Element>} The element in an array.
Find an element within an ng - repeat by its row and column .
Finds an element that matches the specified repeater.