正确的方法来遍历angular.element

时间:2014-02-12 17:55:19

标签: javascript angularjs dom traversal jqlite

我正在使用一个指令,我在其链接函数中获得了DOM元素,并且我有一个我想要访问的元素。

// element = <directive>
//             ...
//             <div id="target"></div>
//             ...
//           </directive>

如果我想获取该元素,例如要执行.click()事件,我需要使用“document”对象,因为我还没有找到直接去的方法一次到这个#target元素。

有关正确方法的任何想法吗? 不幸的是,jqLit​​e只为我们提供find()功能,您无法按id进行搜索而不是class

1 个答案:

答案 0 :(得分:0)

就个人而言,当我使用angularjs时,我将所有内容都包装在一个新的引用中,该引用会自动使用querySelectorAll来定位DOM,如下所示:

YOUR_APP.run(function() {
    jqLite = function(selector) {
        var selectorResult = (typeof selector == 'object') ? selector : document.querySelectorAll(selector)
        return angular.element(selectorResult)
    }; 
})

所以我可以使用它&#34;像jQuery&#34;,使用:jqLite('body > div').addClass('whatever');

在极少数情况下,这不会像jQuery那样表现,例如,通过使用querySelectorAll,你不再获得带有结果的对象数组,就像jQuery会做的那样,但是一个nodeList,所以你不能例如,应用forEach方法,但有一些简单的解决方法。 每当新的参考jqLit​​e不能完成这项工作时,你总是可以直接使用angular.element。

但这应该满足99%的大多数jQuery需求:)

希望这有帮助。