【发布时间】:2013-06-21 10:41:03
【问题描述】:
我正在尝试从我的 Angular.js 应用程序中删除 jquery 以使其更轻,并改用 Angular 的 jqLite。但是该应用大量使用了 jqLite 不支持的 find('#id') 和 find('.classname'),只有 'tag names'(根据文档)
想知道您认为改变它的最佳方法是什么。我想到的一种方法是创建自定义 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')
有什么想法吗?其他想法?
谢谢
里尔
【问题讨论】:
-
ID 必须是唯一的,因此通过 ID 查找另一个元素的子元素是没有意义的。只需按 ID 选择元素。如果您的 ID 不是唯一的,请将您的 ID 更改为一个类。此外,您可以使用
DomElement.querySelector(".myclassname")使用 css 选择器选择单个后代元素,或者通过将 All 添加到它来选择所有匹配:DomElement.querySelectorAll(".myclassname")这当然在 IE 中不起作用 -
如果你定义了一个
a2b元素,你必须已经定义了一个指令。你能在指令的链接函数中做需要做的事情,从而完全避免调用 find() 吗?与你的类类似——你能定义指令并将你需要的功能放入指令的链接(或编译)函数中吗? -
@KevinB Angular 的 jqLite 据说支持“仅标签名称”
-
@MarkRajcok 我没有定义指令。它似乎适用于 IE 和 chrome。但即使我会定义一个指令,它为什么会有所帮助?我仍然需要掌握一个 DOM 元素。
-
为什么 find('span.btn') 或类似的东西对你不起作用?
标签: angularjs angularjs-directive jqlite