Angular.element和$document的使用方法分析,代替jquery

AngularJs是不直接操作DOM的,但是在平时的开发当中,我们有的时候还是需要操作一些DOM的,如果使用原生的JS的话操作过于麻烦,所以大家一般都是使用jQuery,jQuery虽然好用,但是AngularJs是不建议和JQuery同时使用的,所以AngularJs给我们也提供了一些操作DOM的方法———Jqlite

下面以addClass()方法为例给大家讲解一下Jqlite的使用:

查阅官方提供的api,可以看到使用方法是angular.element(ele),其中,允许传入的参数ele的类型是“HTML string or DOMElement to be wrapped into jQuery.”一般传入参数DOMElement

方法一:

1
2
<span style="color: #0000ff; font-size: 16px;"><strong><code class="hljs bash">var <span class="hljs-built_in">test = angular.element(document.querySelector(‘<span class="hljs-comment">#testId’));
test.addClass(‘<span class="hljs-built_in">testClass’);</span></span></span></code></strong></span>

以原生js的document对象的querySelector方法获取元素的id,括号内的使用方法同jquery一致,#代表id,该方法返回的是当前div的DOMElement对象,通过angular.element方法即可将即转化为一个jQuery对象,从而对其操作。

方法二:

1
2
<span style="color: #0000ff;"><strong><span style="font-size: 16px;"><code class="hljs bash">var <span class="hljs-built_in">test = angular.element(document.getElementById(‘<span class="hljs-built_in">test’);
test.addClass(‘<span class="hljs-built_in">testClass’);</span></span></span></code></span></strong></span>

getElementById的方法相信大家用到的比较多,其返回的也是一个DOMElement对象

方法三:

1
2
3
4
5
6
7
8
<strong><span style="font-size: 16px; color: #0000ff;"><code class="hljs less"><span class="hljs-selector-tag">angular<span class="hljs-selector-class">.forEach(angular.element(document).find(<span class="hljs-string">'div'),function(node){
            <span class="hljs-selector-tag">if(node.id == <span class="hljs-string">'testId'){
                     node<span class="hljs-selector-class">.addClass(<span class="hljs-string">'testClass');
            }
if(node.className == ‘testClass’){
node<span class="hljs-selector-class">.removeClass(‘testClass’)
}
           })</span></span></span></span></span></span></span></span></code></span></strong>

find搜索的是tagName,这里使用的是div,当然也可以是p标签等等。

方法四:使用$documen

注:不要忘记注入

$document就和angular.element(document)是一样的,是一个整体的dom结构树,包含jqlite的所有方法,所以方法三也可以改为:

1
2
3
4
5
6
7
8
<span style="color: #0000ff;"><strong><span style="font-size: 16px;"><code class="hljs less"><span class="hljs-selector-tag">angular<span class="hljs-selector-class">.forEach($document.find(<span class="hljs-string">'div'),function(node){
            <span class="hljs-selector-tag">if(node.id == <span class="hljs-string">'testId'){
                     node<span class="hljs-selector-class">.addClass(<span class="hljs-string">'testClass');
            }
if(node.className == ‘testClass’){
node<span class="hljs-selector-class">.removeClass(‘testClass’)
}
        })</span></span></span></span></span></span></span></span></code></span></strong></span>

另外$document[0]和原生JS的document等效

所以,方法一和方法二可以改为

1
2
<span style="color: #0000ff;"><strong><span style="font-size: 16px;"><code class="hljs bash">var <span class="hljs-built_in">test = angular.element(<span class="hljs-variable">$document[0].getElementById(‘<span class="hljs-built_in">test’);
test.addClass(‘<span class="hljs-built_in">testClass’);</span></span></span></span></code></span></strong></span>

以及

1
2
<span style="color: #0000ff;"><strong><span style="font-size: 16px;"><code class="hljs bash">var <span class="hljs-built_in">test = angular.element(<span class="hljs-variable">$document[0].getElementById(‘<span class="hljs-built_in">test’);
test.addClass(‘<span class="hljs-built_in">testClass’);</span></span></span></span></code></span></strong></span>
posted @ 2017-11-17 18:01  董永辉Bruno  阅读(245)  评论(0)    收藏  举报