Javascript 带和不带'document.querySelector'的angular.element`
在我的指令中,我想从DOM访问一个id。我在项目中集成了jQuery,但问题是我可以通过两种方式访问所需的DOM:Javascript 带和不带'document.querySelector'的angular.element`,javascript,angularjs,Javascript,Angularjs,在我的指令中,我想从DOM访问一个id。我在项目中集成了jQuery,但问题是我可以通过两种方式访问所需的DOM: var myEl = angular.element('#divID'); 及 我的问题是它们之间的区别是什么?原因是angular.element('#divId')的作用在于angular.element是对jQuery的引用(只要jQuery在angular之前也包含在项目中,否则默认值是jQuery lite,这有一些限制)。调用jQuery(queryString)时的
var myEl = angular.element('#divID');
及
我的问题是它们之间的区别是什么?原因是
angular.element('#divId')代码>的作用在于angular.element
是对jQuery的引用(只要jQuery在angular之前也包含在项目中,否则默认值是jQuery lite,这有一些限制)。调用jQuery(queryString)
时的标准行为是返回与传入的queryString
匹配的jQuery包装元素列表
document.querySelector
是本机浏览器API。随着时间的推移,浏览器实现了越来越多的API。jQuery的目标之一是与许多浏览器兼容,它允许在许多浏览器实现本机document.querySelector
之前使用查询选择器选择元素
正如您在-document上看到的那样,现在所有主要浏览器都支持querySelector
但是,在您的情况下,还有第三个可能更有效的选项,因为您可以避免浏览器必须解析“#divID”
字符串:
var myEl = angular.element(document.getElementById('divID')); // note no #
它在第一种方式中工作的原因是,您在AngularJS之前包含了jQuery,因此实际上,当您调用angular.element
angular时,它会返回给您一个$的实例,并且您也可以将angular.element与选择器一起使用
否则,AngularJS有一个内置版本的jQuery,即jQlite,您需要在angular.element
中传递HTML元素,以获取jQlite对象,这是一个标准的jQlite对象,AngularJS添加了更多属性
此代码段包括AngularJS之后的jQuery。在这种情况下,选择器不起作用
console.log(angular.element('#test')代码>
再见
我认为他的问题是,为什么还要直接var myEl=angular.element(“#divID”)
正在运行Anks@Qurimmo我已经更新了答案以反映这一点。@angularjs默认使用的是jQlite,它是jQuery的lite版本。如果在angularjs之前包含jQuery,angularjs将使用包含的jQuery。但是如果您只使用angularjs,那么实际上您使用的是jQlite。这是非常不同的,你没有所有的方法,而且你有不同的方法,你有他们的局限性。例如,jQuery中的find()
方法接受任何类型的选择器,在jQlite中只能提供元素tags@quirimmo是的,你是对的。再次更新。谢谢对我来说,可以直接使用angular.element('#divID')代码>。是否确实正确检索元素?@quirimo yes将检索正确的元素。yes,但是我不知道如何以及为什么。请看下面我的更新答案:angular.element
相当于jQuery
,因为angular构建在jQuery之上。在包含angularjs之前,您是否也包含jQuery?是的:)欢迎您。顺便说一句,我的建议是,如果必须使用angular.element,请提供HTML元素作为参数,否则如果要使用jQuery,请直接使用$/jQuery
var myEl = angular.element(document.getElementById('divID')); // note no #