如何在javascript中获取dom对象

来源:互联网 发布:软件测试有前途吗天涯 编辑:程序博客网 时间:2024/06/01 14:10

1.js中有三种获取dom的方法:

根据ID获取对象:document.getElementById(ID);

根据tag获取对象数组:document.getElementsByTagName(p);

根据name获取对象数组:document.getElementsByName(NAME);

 用jquery选择器就多得去了,一般都用jqueryjs一大串代码用jquery几个符号搞定。

2.今天有一个需求是这样的,通过一个selectchange事件,使用ajax获取哪些月份有配置(就当做是有记录就行了),并且将有配置的月份通过字符串,比如:

3.javascriptDOM操作

一、document.getElementById()    根据Id获取元素节点

 

复制代码

    div id=div1

        p id=p1

            我是第一个Pp

        p id=p2

            我是第二个Pp

    div

    

    window.onload = function () {

            var str = document.getElementById(p1).innerHTML;

            alert(str);        弹出    我是第一个P

        }

复制代码

 

二、document.getElementsByName()    根据name获取元素节点

 

复制代码

    div id=div1

        p id=p1

            我是第一个Pp

        p id=p2

            我是第二个Pp

        input type=text value=请输入值 name=userName 

        input type=button value=确定 onclick=fun1()

    div

        

        function fun1() {

            var username = document.getElementsByName(userName)[0].value;

            alert(username);    输出userName里输入的值

        }

复制代码

 

三、document.getElementsByTagName()    根据HTML标签名获取元素节点,注意getElements的选择器返回的是一个NodeList对象,能根据索引号选择其中1个,可以遍历输出。

 

复制代码

    div id=div1

        p id=p1

            我是第一个Pp

        p id=p2

            我是第二个Pp

    div

 

    window.onload = function () {

            var str = document.getElementsByTagName(p)[1].innerHTML;

            alert(str);        输出  我是第二个P,因为获取的是索引为1P,索引从0开始

        }    

 

    window.onload = function () {

            var arr = document.getElementsByTagName(p);

            for (var i = 0; i  arr.length; i++) {

                alert(arr[i].innerHTML);

            }

        }

 

    window.onload = function () {

            var node = document.getElementById(div1);

         var node1 = document.getElementsByTagName(p)[1];    从获取到的元素再获取

            alert(node1.innerHTML);

    }

复制代码

 

四、document.getElementsByClassName()    根据class获取元素节点

 

复制代码

    div id=div1

        p id=p1 class=class1

            我是第一个Pp

        p id=p2

            我是第二个Pp

    div

 

    window.onload = function () {

            var node = document.getElementsByClassName(class1)[0];

            alert(node.innerHTML);

        }

复制代码

五、javascript中的CSS选择器

 

复制代码

    document.querySelector()    根据CSS选择器的规则,返回第一个匹配到的元素

    document.querySelectorAll()    根据CSS选择器的规则,返回所有匹配到的元素

 

    div id=div1

        p id=p1 class=class1

            我是第一个Pp

        p id=p2 class=class2

            我是第二个Pp

    div

 

        window.onload = function () {

            var node = document.querySelector(#div1  p);    

            alert(node.innerHTML);                输出  我是第一个P

 

            var node1 = document.querySelector(.class2);

            alert(node1.innerHTML);                输出  我是第二个P

 

            var nodelist = document.querySelectorAll(p);

            alert(nodelist[0].innerHTML +  -  + nodelist[1].innerHTML);    输出  我是第一个P - 我是第二个P

        }

复制代码

 

六、文档结构和遍历

    (1)作为节点数的文档

    1parentNode    获取该节点的父节点    

    2childNodes    获取该节点的子节点数组

    3firstChild    获取该节点的第一个子节点

    4lastChild    获取该节点的最后一个子节点

    5nextSibling    获取该节点的下一个兄弟元素

    6previoursSibling    获取该节点的上一个兄弟元素

    7nodeType    节点的类型,9代表Document节点,1代表Element节点,3代表Text节点,8代表Comment节点,11代表DocumentFragment节点

    8nodeVlue    Text节点或Comment节点的文本内容

    9nodeName    元素的标签名(P,SPAN,#text(文本节点),DIV),以大写形式表示

 

    注意,以上6个方法连元素节点也算一个节点。

 

复制代码

    div id=div1

            p id=p1 class=class1

                    我是第一个Pp

            p id=p2 class=class2

                    我是第二个Pp

        div

    

     window.onload = function () {

            var node1 = document.querySelector(.class2);

            alert(node1.parentNode.innerHTML); 输出  p id=p1 class=class1我是第一个Ppp id=p2 class=class2我是第二个Pp

 

            var nodelist = document.getElementById(div1);

            var arr = nodelist.childNodes;

            alert(arr[1].innerHTML +  -  + arr[3].innerHTML); 输出    我是第一个P - 我是第二个为什么是13呢?因为本方法文本节点也会获取,

                                           也就是说0,2,4是文本节点

        }

 

    div id=div1

            文本1

            p id=p1 class=class1

                我是第一个Pp

            文本2

            p id=p2 class=class2

                我是第二个Pp

            文本3

        div

 

    window.onload = function () {        依次输出,文本1,我是第一个P,文本2,我是第二个P,文本3

            var node = document.getElementById(div1);

            for (var i = 0; i  node.childNodes.length; i++) {

                if (node.childNodes[i].nodeType == 1) {

                    alert(node.childNodes[i].innerHTML);

                }

                else if (node.childNodes[i].nodeType == 3) {

                    alert(node.childNodes[i].nodeValue);

                }

            }

        }

复制代码

    (2)作为元素树的文档

    1firstElementChild        第一个子元素节点

    2lastElementChild        最后一个子元素节点

    3nextElementSibling        下一个兄弟元素节点

    4previousElementSibling    前一个兄弟元素节点

    5childElementCount        子元素节点个数量

    注意,此5个方法文本节点不算进去

 

复制代码

        div id=div1

            p id=p1 class=class1

                我是第一个Pp

            p id=p2 class=class2

                我是第二个Pp

      div

 

        window.onload = function () {

            var node = document.getElementById(div1);

            var node1 = node.firstElementChild;

            var node2 = node.lastElementChild;

 

            alert(node.childElementCount);  输出2div1一共有两个非文档子元素节点

            alert(node1.innerHTML);         输出 我是第一个P

            alert(node2.innerHTML);         输出 我是第二个P

            alert(node2.previousElementSibling.innerHTML);  输出 我是第一个P(第二个元素节点的上一个非文本元素节点是P1)

            alert(node1.nextElementSibling.innerHTML);      输出 我是第二个P(第一个元素节点的下一个兄弟非文本节点是P2)

        }

复制代码

 

七、javascript操作HTML属性

    1、属性的读取,此处要注意的是,某些HTML属性名称在javascript之中是保留字,因此会有些许不同,如class,lable中的forjavascript中变为htmlFor,className

 

复制代码

    div id=div1

            p id=p1 class=class1 我是第一个Pp

            img src=123.jpg alt=我是一张图片 id=img1 

            input type=text value=我是一个文本框 id=input1 

        div

 

        window.onload = function () {

            var nodeText = document.getElementById(input1);

            alert(nodeText.value);        输出 我是一个文本框

            var nodeImg = document.getElementById(img1);

            alert(nodeImg.alt);            输出 我是一张图片

            var nodeP = document.getElementById(p1);

            alert(nodeP.className);        输出 class1    注意获取classclassName,如果写成nodeP.class则输出undefined

        }

复制代码

    2、属性的设置,此处同样要注意的是保留字

 

复制代码

    div id=div1

            img src=1big.jpg alt=我是一张图片 id=img1 onclick=fun1() 

        div

 

    function fun1() {

            document.getElementById(img1).src = 1small.jpg;        改变图片的路径属性。实现的效果为,当点击图片时,大图变小图。

        }

复制代码

 

    3、非标准HTML属性

    getAttribute();    注意这两个方法是不必理会javascript保留字的,HTML属性是什么就怎么写。

    setAttribute();

 

复制代码

        div id=div1

            img src=1big.jpg alt=我是一张图片 class=imgClass id=img1 onclick=fun1() 

        div

 

    function fun1() {

            document.getElementById(img1).setAttribute(src, 1small.jpg);

            alert(document.getElementById(img1).getAttribute(class));

        }

复制代码

    4Attr节点的属性

        attributes属性  非Element对象返回nullElement一半返回Attr对象。Attr对象是一个特殊的Node,通过namevalue获取属性名称与值。

        如document.getElementById(img1)[0];

           document.getElementById(img1).src;

 

复制代码

    div id=div1

            img src=1big.jpg alt=我是一张图片 class=imgClass id=img1 onclick=fun1() 

        div

 

    function fun1() {

            alert(document.getElementById(img1).attributes[0].name);    输出  onclick    注意,通过索引器访问是写在右面在排前面,从0开始

            alert(document.getElementById(img1).attributes.src.value);    输出1big.jpg

            document.getElementById(img1).attributes.src.value = 1small.jpg;    点击后改变src属性,实现了点击大图变小图效果

        }

复制代码

 

八、元素的内容

    1innerTexttextContent    innerTexttextContent的区别,当文本为空时,innerText是,而textContentundefined

    2innerHTML

 

复制代码

    div id=div1

            p id=p1我是第一个Pp

            p id=p2我是第bbPp

        div

    

    window.onload = function () {

            alert(document.getElementById(p1).innerText);  注意火狐浏览器不支持innerText

            alert(document.getElementById(p1).textContent);    基本都支持textContent

            document.getElementById(p1).textContent = 我是p1javascript改变了我;    设置文档Text

            alert(document.getElementById(p2).textContent);

            alert(document.getElementById(p2).innerHTML); innerHTMLinnerText的区别,就是对HTML代码的输出方式Text不会输出HTML代码

        }

复制代码

 

九、创建,插入,删除节点

    1document.createTextNode()    创建一个文本节点

 

复制代码

        div id=div1

            p id=p1我是第一个Pp

            p id=p2我是第二个Pp

        div

 

    window.onload = function () {

            var textNode = document.createTextNode(p我是一个javascript新建的节点p);

            document.getElementById(div1).appendChild(textNode);

        }

复制代码

 

    完成后HTML变为:

    div id=div1

        p id=p1我是第一个Pp

        p id=p2我是第二个Pp

        我是一个javascript新建的节点

    div

 

    2document.createElement()    创建一个元素节点

 

复制代码

    div id=div1

            p id=p1我是第一个Pp

            p id=p2我是第二个Pp

        div

 

    window.onload = function () {

            var pNode = document.createElement(p);

            pNode.textContent = 新建一个P节点;

            document.getElementById(div1).appendChild(pNode);

        }

复制代码

    执行之后HTML代码变为:

 

    div id=div1

        p id=p1我是第一个Pp

        p id=p2我是第二个Pp

        p新建一个P节点p

    div

 

    3、插入节点

        appendChild()    将一个节点插入到调用节点的最后面

        insertBefore()    接受两个参数,第一个为待插入的节点,第二个指明在哪个节点前面,如果不传入第二个参数,则跟appendChild一样,放在最后。

 

复制代码

    div id=div1

            p id=p1我是第一个Pp

        div

 

    window.onload = function () {

            var pNode1 = document.createElement(p);

            pNode1.textContent = insertBefore插入的节点;

            var pNode2 = document.createElement(p);

            pNode2.textContent = appendChild插入的节点;

            document.getElementById(div1).appendChild(pNode2);

            document.getElementById(div1).insertBefore(pNode1,document.getElementById(p1));

        }

复制代码

    执行之后HTML代码为:

    div id=div1

        pinsertBefore插入的节点p

        p id=p1我是第一个Pp

        pappendChild插入的节点p

    div

 

十、删除和替换节点。

    1removeChild();    由父元素调用,删除一个子节点。注意是直接父元素调用,删除直接子元素才有效,删除孙子元素就没有效果了。

 

复制代码

    div id=div1

            p id=p1我是第一个Pp

            p id=p2我是第二个Pp

        div

 

    window.onload = function () {

            var div1 = document.getElementById(div1);

            div1.removeChild(document.getElementById(p2));

        }

复制代码

 

    执行之后代码变为:

    div id=div1

        p id=p1我是第一个Pp    注意到第二个P元素已经被移除了

    div

    

    2replaceChild()    删除一个子节点,并用一个新节点代替它,第一个参数为新建的节点,第二个节点为被替换的节点

 

复制代码

    div id=div1

            p id=p1我是第一个Pp

            p id=p2我是第二个Pp

        div

 

    window.onload = function () {

            var div1 = document.getElementById(div1);

            var span1 = document.createElement(span);

            span1.textContent = 我是一个新建的span;

            div1.replaceChild(span1,document.getElementById(p2));

        }

复制代码

    执行完成后HTML代码变为:

    div id=div1

        p id=p1我是第一个Pp

        span我是一个新建的spanspan    留意到p2节点已经被替换为span1节点了

    div

 

十一、javascript操作元素CSS

 

    通过元素的style属性可以随意读取和设置元素的CSS样式,例子:

 

复制代码

head

    titletitle

    script type=textjavascript

        window.onload = function () {

            alert(document.getElementById(div1).style.backgroundColor);

            document.getElementById(div1).style.backgroundColor = yellow;

        }

    script

head

body

    div id=div1 style=width100px; height100px; background-colorreddiv

body

复制代码

 

0 0
原创粉丝点击