AngularJS:如何使用jqLite查找?
我试图从我的Angular.js应用程序中删除jquery,以使其更轻,并把Angular的jqLite代替。 但是该应用程序大量使用find('#id')和find('.classname'),这些不被jqLite支持,只有'标签名'(按照文档)
想知道你觉得什么是最好的方法来改变它。 我想到的一种方法是创build自定义的HTML标签。 例如:改变
<span class="btn btn-large" id="add-to-bag">Add to bag</span>
至
<a2b style="display:none;"><span class="btn btn-large" >Add to bag</span></a2b>
和
$element.find('#add-to-bag')
至
$element.find('a2b')
有什么想法吗? 其他的想法?
谢谢
利奥尔
本质上和@ 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'))
注意:如果您想从控制器执行此操作,您可能需要查看开发人员指南中的“正确使用控制器”部分,并将您的表示逻辑重构为适当的指令(如<a2b …>) 。
如果elem.find()
不适合你,检查你是否包括angular脚本之前的 JQuery脚本….
我在我的app
使用jQuery
,这是为我工作。
function link(scope, el) { // ... $(el[0]) .find('.classname') .doSomethingJQuery_ish(); // ... }
笔记:
- 这个内置的
.find()
不能像AngularJS文档中提到的那样用class-names/ids
来查找元素: https ://docs.angularjs.org/api/ng/function/angular.element
find() – 仅限于通过标签名称查找
- 上面提到的方法很好,如果你已经在你的
app
加载jQuery
。 如果没有,你将不得不加载它才能工作。
祝你好运。
angualr使用jQuery的轻量版本称为jqlite,这意味着它不具备jQuery的所有function。 这里是在angularjs文档中有关你可以在jQuery中使用什么的参考。 Angular元素文档
在你的情况下,你需要find一个ID或类名称的股利。 您可以使用类名称
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)); }}
它不像jQuery那么灵活,但是什么
- 了解如何从angularpath中移除散列号
- 未知的提供者:$ modalProvider < – $ AngularJS的模态错误
- AngularJS intellisense不适用于Visual Studio 2015
- selectbootstrap vs材料devise
- angular度范围函数执行多次
- 如何使ng-repeat过滤掉重复的结果
- Angular-animate – 未知的提供者:$$ asyncCallbackProvider < – $$ asyncCallback < – $ animate < – $ compile
- 使用哪一个,AngularUI Bootstrap或AngularStrap?
- 无法在Angularjs中使用templateUrl加载模板