【问题标题】:get html element in ng-repeat angular js在ng-repeat angular js中获取html元素
【发布时间】:2014-10-13 16:39:47
【问题描述】:

我需要访问在 ng repeat 中创建的 dom 元素,我有这段代码,但我不明白为什么我无法获取该元素。

<div></div>
<ul>
      <li ng-repeat="data in data"">
        {{data}}
      </li>
    </ul>
    <script>
      var thirdListItem = $('ul').find('li').first().text();
        $('div').html(thirdListItem);
    </script>

这里是笨蛋http://plnkr.co/edit/91S2esBo0uHzQHyEBuvj?p=preview

【问题讨论】:

  • 为什么要这样做?像这样混合 jQuery 和 Angular 通常是个坏主意。
  • 当你的脚本被执行时,元素还没有被创建。因为它是作为摘要循环的一部分创建的......你必须使用自定义指令来完成它
  • 这是一个例子。因为假设我需要在元素在 html 中呈现之前动态获取元素的高度或宽度,我怎样才能得到这个值?

标签: javascript jquery angularjs


【解决方案1】:

同时使用 AngularJS 和 jQuery 并不是一个好主意。顺便说一句,试试这个快速而肮脏的解决方案:

  $(function(){
      var thirdListItem = $('ul').find('li').first().text();
      $('div').html(thirdListItem);
  });

http://plnkr.co/edit/HDvZwPp1rFeoxVYb0qGd?p=preview

正如有人已经说过的,最好的做法是创建一个custom directive

【讨论】:

  • 没问题。如果您说它的坏主意,那么角度方式是什么?
  • 如答案中所写,您应该查看指令。我知道混合 jQuery 很有吸引力,因为您可能已经知道它,但它不是干净的代码,也不是最佳实践,它可能导致意想不到的结果和更难的维护/调试
  • 好的。但这就是我的问题。我知道如何编写指令。我需要一个线索来完成我上面写的事情。
  • 从您的问题来看,您并不清楚您在问什么。您可以在渲染后使用检查ng-repeat 何时结束的指令访问元素,然后对元素进行操作。从这里开始:plnkr.co/edit/AQcfmUphHqBZ2phyB3X9?p=preview
【解决方案2】:

对于您的特定情况,请尝试以下解决方案: 它使用 ng-init 将列表项的索引值传递给一个函数,该函数使用该索引使用 jQuery 返回 DOM 元素。输出是控制台。

http://plnkr.co/edit/XJnBzIyQoSJf9YKE0953?p=preview

  <ul>
    <li ng-repeat="data in data" ng-init="find($index +1)">
      {{data}}
    </li>
  </ul>

$scope.find = function(i){
       $ele= $('li:nth-child(' + i +')');
       console.log($ele);
  }

【讨论】:

  • 各位对我的误解深表歉意,但我试图完成的事情就像我在上面第三条评论中写的那样。
  • 更新了 plunker 以解决您的问题
  • 好的,我现在就这样做
  • 看起来这个(元素的大小)确实是你不应该首先担心的事情。
  • 当指令处于活动状态时,这发生在 document.ready 事件之后?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2013-03-22
  • 1970-01-01
相关资源
最近更新 更多