はじめに
私は最近とあるプロジェクトにおいてAngularJS 1.5.11を使っていて、jQuery3系も読み込まれているが使わないようにしている
(いつか排除したいため)
問題
ここで以下のようなコードがある
let target = angular.element.find(".classname");
今まで普通にこのようなコードを書いていたが、オンラインエディタで実行しようとしたら、結果がundefinedになってしまった
原因
調べてみると、AngularJS組み込みのjqLiteのfind()
メソッドはタグ名での検索のみ実装されているらしい
find() - Limited to lookups by tag name
参照: https://docs.angularjs.org/api/ng/function/angular.element
なぜ今まで動いていた?
もし、jQueryが利用可能であれば、angular.elementはjQuery関数へのエイリアスになります。 そうでなければ、angular.elementは、"jQuery lite"または"jqLite"と呼ばれる、 Angular組み込みのjQueryのサブセットに委譲します。
参照: http://js.studio-kingdom.com/angularjs/ng_global_apis/angular_element
AngularJSはjQueryが利用可能な時、angular.elementをjQueryへのエイリアスにするということでした
結論
誰もjQueryからは逃げられない......
実際のところそんな躍起になってjQueryを排除することもないし、積極的に使っていけばいいんじゃないかという気持ちになった