Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带和不带'document.querySelector'的angular.element`_Javascript_Angularjs - Fatal编程技术网

Javascript 带和不带'document.querySelector'的angular.element`

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)时的

在我的指令中,我想从DOM访问一个id。我在项目中集成了jQuery,但问题是我可以通过两种方式访问所需的DOM:

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 #