Get DOM element by scope $id

前端 未结 4 1800
死守一世寂寞
死守一世寂寞 2020-12-08 02:37

I understand I can get the scope by element:

scope = angular.element($0).scope();
scope.$id; // \"003\"

How do I get reverse: Find the DOM

相关标签:
4条回答
  • 2020-12-08 03:05

    Although it's not very sexy each dom node gets a class ng-scope so you could tech do something like this maybe:

    function getScope(id) {
    var elem;
    $('.ng-scope').each(function(){
        var s = angular.element(this).scope(),
            sid = s.$id;
    
        if(sid == id) {
            elem = this;
            return false; // stop looking at the rest
        }
    });
    return elem;
    }
    
    0 讨论(0)
  • 2020-12-08 03:05

    Trying out the answer, I found that directives don't seem to have the class ng-scope, so here's a modified version that'll fallback to everything.

    var getByScopeId = function(id) { 
        var filterfn = function(i,el) {
            var sc = angular.element(el).scope();
    
            return sc && sc.$id == id;
        };
        // low hanging fruit -- actual scope containers
        var result = $('.ng-scope').filter(filterfn);
        if(result && result.length) return result;
    
        // try again on everything...ugh
        return $(':not(.ng-scope)').filter(filterfn);
    }
    

    Usage:

    var results = getByScopeId('003')
    
    0 讨论(0)
  • 2020-12-08 03:13

    You can always get the scope using element's id.

    Example:

    html:

    <div id="myId"></div>
    

    js:

      var myEl = angular.element(document.querySelector('#myId'));
      var myScope = angular.element(myEl).scope(); 
    

    Live example : http://jsfiddle.net/choroshin/7XQA7/2/

    also as David Chase suggested, you can always use batarang - Extends Chrome Developer Tools, adding tools for debugging and profiling AngularJS applications.

    0 讨论(0)
  • The same solution written in es2015, without JQuery dependency:

    getElementFromScopeId = (id) => [].slice.call(document.querySelectorAll('.ng-scope')).map((x) => angular.element(x)).filter(x => x.scope().$id == id).pop();
    
    0 讨论(0)
提交回复
热议问题