Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to select an element by classname using jqLite?

I'm trying to remove jquery from my Angular.js app in order to make it lighter, and put Angular's jqLite instead. But the app makes heavy use of find('#id') and find ('.classname'), which are not supported by jqLite, only 'tag names' (as per documentation)

wondered what do u feel would be the best approach to change it. One approach I thought about is to create custom HTML tags. for example: change
<span class="btn btn-large" id="add-to-bag">Add to bag</span>

to

<a2b style="display:none;"><span class="btn btn-large" >Add to bag</span></a2b> 

and

$element.find('#add-to-bag')  

to

$element.find('a2b') 

Any thoughts? other ideas?

thanks

Lior

like image 919
Lior Avatar asked Jun 24 '13 19:06

Lior


People also ask

How to get element by class in AngularJS?

Given an HTML document and the task is to select an element by its className using AngularJS. Approach: The approach is to use the document. querySelector() method to get the element of a particular className. In the first example the element of className class1 is selected and its background color is changed to green.

What is jqLite?

jqLite is a tiny, API-compatible subset of jQuery that allows AngularJS to manipulate the DOM in a cross-browser compatible way. jqLite implements only the most commonly needed functionality with the goal of having a very small footprint. To use jQuery , simply ensure it is loaded before the angular. js file.

What is angular element in angular?

Angular elements are Angular components packaged as custom elements (also called Web Components), a web standard for defining new HTML elements in a framework-agnostic way.


2 Answers

Essentially, and as-noted by @kevin-b:

// find('#id') angular.element(document.querySelector('#id'))  //find('.classname'), assumes you already have the starting elem to search from angular.element(elem.querySelector('.classname')) 

Note: If you're looking to do this from your controllers you may want to have a look at the "Using Controllers Correctly" section in the developers guide and refactor your presentation logic into appropriate directives (such as <a2b ...>).

like image 176
psema4 Avatar answered Dec 09 '22 23:12

psema4


angualr uses the lighter version of jquery called as jqlite which means it doesnt have all the features of jQuery. here is a reference in angularjs docs about what you can use from jquery. Angular Element docs

In your case you need to find a div with ID or class name. for class name you can use

var elems =$element.find('div') //returns all the div's in the $elements     angular.forEach(elems,function(v,k)){     if(angular.element(v).hasClass('class-name')){      console.log(angular.element(v)); }} 

or you can use much simpler way by query selector

angular.element(document.querySelector('#id'))  angular.element(elem.querySelector('.classname')) 

it is not as flexible as jQuery but what

like image 36
hannad rehman Avatar answered Dec 10 '22 00:12

hannad rehman