Find child element in AngularJS directive

JavascriptAngularjsAngularjs Directive

Javascript Problem Overview


I am working in a directive and I am having problems using the parameter element to find its childs by class name.

.directive("ngScrollList", function(){
    return {
        restrict: 'AE',
        link: function($scope, element, attrs, controller) {
            
            var scrollable = element.find('div.list-scrollable');
        
            ...
        }
      };
})

I can find it by the tag name but it fails to find it by class name as I can see in the console:

element.find('div')
[<div class="list-viewport">​…​</div>​,<div class="list-scrollable">​…​</div>​]
element.find('div.list-scrollable')
[]

Which would be the right way of doing such thing? I know I can add jQuery, but I was wondering if wouldn't that be an overkill....

Javascript Solutions


Solution 1 - Javascript

jQlite (angular's "jQuery" port) doesn't support lookup by classes.

One solution would be to include jQuery in your app.

Another is using QuerySelector or QuerySelectorAll:

link: function(scope, element, attrs) {
   console.log(element[0].querySelector('.list-scrollable'))
}

We use the first item in the element array, which is the HTML element. element.eq(0) would yield the same.

FIDDLE

Solution 2 - Javascript

In your link function, do this:

// link function
function (scope, element, attrs) {
  var myEl = angular.element(element[0].querySelector('.list-scrollable'));
}

Also, in your link function, don't name your scope variable using a $. That is an angular convention that is specific to built in angular services, and is not something that you want to use for your own variables.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvtortolaView Question on Stackoverflow
Solution 1 - JavascriptMoshoView Answer on Stackoverflow
Solution 2 - JavascriptpjeView Answer on Stackoverflow