jQuery Lite元素查找器,带有Ng-If on Angular Directive

时间:2016-03-16 15:40:49

标签: javascript jquery angularjs

我有一个带有两个html元素的指令,一个是ng-if指令而另一个不是:

  <div>
     <div ng-if="true" id="ngIfTest">TEST WITH NG-IF</div>
  </div>

  <div>
     <div id="withoutNgIfTest">TEST WITHOUT NG-IF</div>
  </div>

我选择了这样的元素:

var ngIfElement = angular.element(elem[0].querySelector('#ngIfTest'));
var noNgIfElement = angular.element(elem[0].querySelector('#withoutNgIfTest'));

我可以选择不使用ng-if的元素,但不能选择那个使用ng-if的元素。

LIVE EXAMPLE HERE (Click on the text to see it selecting one properly)

&#13;
&#13;
var myApp = angular.module('myApp',[]);

myApp.directive('myDirective', function() {
    return {
        link: function(scope,elem) {
        
        				//var myDivElement = elem #myDiv;
                var myDivElement = angular.element(elem[0].querySelector('.myDiv'));
        
                elem.bind('click', function() {
                    elem.css('background-color','red');
                    myDivElement.css('color','blue');
                    console.log('Element clicked');
                    scope.$apply(function() {
                        scope.color = "red";
                    });
                });
                
        }
    }
});


function MyCtrl($scope) {    
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.1/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div ng-controller="MyCtrl">
    <div id="me" style= "background-color:yellow;" my-directive>
          <div id="myDiv" class="myDiv">TEST</div>
    </div>
</div>
&#13;
&#13;
&#13;

我意识到这与ng有关 - 如果创建自己的范围,但我不知道如何解决它。

我正在绘制的相关问题:AngularJS: How to .find using jqLite?

1 个答案:

答案 0 :(得分:5)

创建它自己的范围并不是真正的问题,因为当条件不是ngIf时,ngShow不会写入DOM满意,所以你的jQuery选择器永远找不到它。如果您需要元素存在于DOM中并且可以查询,请使用ngHiderandom.shuffle(list_1)