JavaScript进阶之DOM

Posted FuZZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript进阶之DOM相关的知识,希望对你有一定的参考价值。

文档对象模型DOM

文档对象模型(Document Object Model,DOM)是一种用于html和XML文档的编程接口。它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式。我们最为关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是javascript语言规范里的规定的核心内容。当网页被加载时,
浏览器会创建页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树。

一、查找元素

1.直接查找

  • document.getElementById 根据ID获取一个标签
  • document.getElementsByName 根据name属性获取标签集合
  • document.getElementsByClassName 根据class属性获取标签集合
  • document.getElementsByTagName 根据标签名获取标签集合

2.间接查找

  • parentNode // 父节点
  • childNodes // 所有子节点
  • firstChild // 第一个子节点
  • lastChild // 最后一个子节点
  • nextSibling // 下一个兄弟节点
  • previousSibling // 上一个兄弟节点

  • parentElement // 父节点标签元素

  • children // 所有子标签

  • firstElementChild // 第一个子标签元素

  • lastElementChild // 最后一个子标签元素

  • nextElementtSibling // 下一个兄弟标签元素

  • previousElementSibling // 上一个兄弟标签元素

节点和标签元素的区别: 节点会把所有元素列出来包括换行符,标签元素只列出标签元素和文本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p id="p1"><span>99999</span></p>
<script>
    var t = document.getElementById(\'p1\')
    var t1 = t.childNodes;
    var t2 = t.children;
    console.log(t1);
    console.log(t2);
</script>
</body>
</html>

 

效果:

二、操作元素

1.内容

  • innerHTML 设置或获取位于对象起始和结束标签内的 HTML
  • outerHTML 设置或获取对象及其内容的 HTML 形式
  • innerText 设置或获取位于对象起始和结束标签内的文本
  • outerText 设置(包括标签)或获取(不包括标签)对象的文本
  • value 获取input标签的值

innerHTML、outerHTML、innerText、outerText区别:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>innerHTML、outerHTML和innerText、outerHTML的区别</title>
    <script language="JavaScript" type="text/javascript"> 
  //.innerHTML
  function innerHTMLDemo()
  { 
   test_id1.innerHTML="<i><u>设置或获取位于对象起始和结束标签内的 HTML.</u></i>"; 
  } 
  //.innerText
  function innerTextDemo()
  { 
   test_id2.innerText="<i><u>设置或获取位于对象起始和结束标签内的文本.</u></i>"; 
  } 
  //.outerHTML
  function outerHTMLDemo()
  { 
   test_id3.outerHTML="<font size=9pt color=red><i><u>设置或获取对象及其内容的 HTML 形式.</u></i></font>"; 
  }
  //.outerText
  function outerTextDemo()
  { 
   test_id4.outerText="<br></br><i><u>设置(包括标签)或获取(不包括标签)对象的文本.</u></i>"; 
  }
  </script> 
  </head> 
  <body> 
  <ul> 
  <li id="test_id1" onclick="innerHTMLDemo()">innerHTML效果.</li> 
  <li id="test_id2" onclick="innerTextDemo()">innerText效果.</li> 
  <li id="test_id3" onclick="outerHTMLDemo()">outerHTML效果.</li> 
  <li id="test_id4" onclick="outerTextDemo()">outerText效果.</li> 
  </ul> 
  </body> 
  </html>

 

结果:
请复制代码到此,提交查看:
http://www.w3school.com.cn/tiy/t.asp?f=html_basic

不同之处: 
简单的说innerHTML和outerHTML、innerText与outerText的不同之处在于:
  1)、innerHTML与outerHTML在设置对象的内容时包含的HTML会被解析,而innerText与outerText则不会。
  2)、在设置时,innerHTML与innerText仅设置标签内的文本,而outerHTML与outerText设置包括标签在内的文本。
  
  
value实例:
利用value,搜索框默认显示请输入关键字,当鼠标点击进去之后,删除请输入关键字,当鼠标点击其他地方之后,如果搜索框有内容,则显示输入的内容,没有则继续显示请输入关键字

代码:
  

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

    <input id="i1" type="text" value="请输入关键字"  onfocus="Foncs()" onblur="Blur()"/>

    <script type="text/javascript">
        function Foncs() {
            var tag = document.getElementById(\'i1\');
            if (tag.value == "请输入关键字") {
                tag.value = \'\';
            }
        }
        function Blur() {
            var tag = document.getElementById(\'i1\');
            var val = tag.value;
            if (val.trim().length == 0) {
                tag.value = "请输入关键字";
            }

        }
        
    </script>

</body>
</html>

 

结果:
请复制代码到此,提交查看:
http://www.w3school.com.cn/tiy/t.asp?f=html_basic  
  
  

2.属性

  • attributes // 获取所有标签属性
  • setAttribute(key,value) // 设置标签属性
  • getAttribute(key) // 获取指定标签属性

    全选、反选、取消示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>


<input type="button" value="全选" onclick="ChoiceALL()"/>
<input type="button" value="取消" onclick="CancleALL()"/>
<input type="button" value="反选" onclick="ReversALL()"/>
<table border="1">
    <thead>
        <tr>
            <td>序号</td>
            <td>用户</td>
            <td>密码</td>
        </tr>
    </thead>
    <tbody id="tb">
        <tr>
            <td>
                <input type="checkbox" />
            </td>
            <td>
                张三
            </td>
            <td>
                123
            </td>
        </tr>

            <td>
                <input type="checkbox" />
            </td>
            <td>
                张三
            </td>
            <td>
                123
            </td>
        </tr>

            <td>
                <input type="checkbox" />
            </td>
            <td>
                张三
            </td>
            <td>
                123
            </td>
        </tr>
    </tbody>

</table>
<script type="text/javascript">
    function ChoiceALL() {
        var tb = document.getElementById(\'tb\');
        var trs = tb.children;
        for (i=0;i<trs.length;i++) {
            var current_tr = trs[i];
            var ck = current_tr.firstElementChild.firstElementChild;
//            ck.setAttribute(\'checked\',\'checked\');
            ck.checked = true;
        }

    }
    function CancleALL() {
        var tb = document.getElementById(\'tb\');
        var trs = tb.children;
        for (i=0;i<trs.length;i++) {
            var current_tr = trs[i];
            var ck = current_tr.firstElementChild.firstElementChild;
//            ck.removeAttribute(\'checked\');
            ck.checked = false;
        }

    }

    function ReversALL() {
        var tb = document.getElementById(\'tb\');
        var trs = tb.children;
        for (i=0;i<trs.length;i++) {
            var current_tr = trs[i];
            var ck = current_tr.firstElementChild.firstElementChild;
            if(ck.checked) {
                ck.checked = false;
            } else {
                ck.checked = true;
            }

        }

    }
</script>
</body>
</html>

 

3.class 类
  • className // 获取所有类名
  • classList.remove(cls) // 删除指定类
  • classList.add(cls) // 添加类

通过对class类的增删,实现对话框

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<style>
        .hide{
            display: none !important;
        }
        .shade{
            position: fixed;
            top:0;
            bottom: 0;
            left: 0;
            right: 0;
            /*background-color: black;*/
            /*opacity: 0.6;*/
            background-color: rgba(0,0,0,.6);
            z-index: 1000;
        }
        .modal{
            height: 200px;
            width: 400px;
            background-color: white;
            position: fixed;
            top: 50%;
            left: 50%;
            margin-left: -200px;
            margin-top: -100px;
            z-index: 1001;
        }
    </style>

    <div style="height: 500px ;width: 100%">
        <input type="button" value="点我"  onclick="showhide()"/>
    </div>
    <div id="d1" class="shade hide"></div>
    <div id="d2" class="modal hide">
        <a href="javascript:void(0)" onclick="undisplayhide()">取消</a>
    </div>

    <script type="text/javascript">
        function showhide() {
            var d1 = document.getElementById(\'d1\');
            var d2 = document.getElementById(\'d2\');
            d1.classList.remove(\'hide\');
            d2.classList.remove(\'hide\');

        }
        function undisplayhide() {
            var d1 = document.getElementById(\'d1\');
            var d2 = document.getElementById(\'d2\');
            d1.classList.add(\'hide\');
            d2.classList.add(\'hide\');

        }
    </script>
</body>
</html>

 

4.标签

创建标签

  • 方式1:使用对象创建标签,并添加对应的属性
var tag = document.createElement(\'a\')    创建a标签
tag.innerText = "fuzj"      添加a标签中文本内容
tag.className = "c1"            给a标签应用class c1的样式
tag.href = "http://www.cnblogs.com/pycode"  给a标签添加href属性 

 

  • 方式2:采用字符串的形式,将标签和属性作为字符串
var tag = "<a class=\'c1\' href=\'http://www.cnblogs.com/pycode\'>fuzj</a>"

 

操作标签

  • 对象创建方式操作
var d = document.getElementById(\'d\')   //获取要插入的标签
    d.insertAdjacentElement(\'beforeEnd\',tag)

 

  • 字符串形势操作
var d = document.getElementById(\'d\');   //获取要插入的标签
    d.insertAdjacentHTML(\'beforeEnd\',tag);

 

插入的位置说明:

  • beforeBegin 在本标签前面添加
  • afterBegin 在本标签的子标签前面添加
  • beforeEnd 在本标签的子标签后面添加
  • afterEnd 在本标签后面添加
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

<div id="d">
    <p>p标签1</p>
    <p>p标签2</p>
</div>
<script>

    var tag1 = "<span>beforeEnd</span>";
    var tag2 = "<span>afterEnd</span>";
    var tag3 = "<span>beforeBegin</span>";
    var tag4 = "<span>afterBegin</span>";
    var d = document.getElementById(\'d\');   //获取要插入的标签
    d.insertAdjacentHTML(\'beforeEnd\',tag1);
    d.insertAdjacentHTML(\'afterEnd\',tag2);
    d.insertAdjacentHTML(\'beforeBegin\',tag3);
    d.insertAdjacentHTML(\'afterBegin\',tag4);


</script>

</body>
</html>

 

补充:
还有一种方式 添加标签

  • appendChild 添加到指定子节点
  • insertBefore 在现有的子节点前插入一个新的子节点
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>

<body>

<div id="d">
    <p>p标签1</p>
    <p>p标签2</p>
</div>
<script>

    var tag1 = document.createElement(\'span\');
    var tag2 = document.createElement(\'span\');
    tag1.innerText = \'appendChild\';
    tag2.innerText = \'insertBefore\';
    var d = document.getElementById(\'d\');   //获取要插入的标签

    d.appendChild(tag1);
    d.insertBefore(tag2,d.childNodes[0]);    //d.choildNodes获取d的所有子节点

</script>

</body>
</html>

 

5.样式操作

dom对样式操作直接在节点对象后面加.style.对应的样式,注意,类似font-size 变为fontSize,没有了-

var obj = document.getElementById(\'i1\')
obj.style.fontSize = "32px";
obj.style.backgroundColor = "red";

 

点赞案例:通过循环动态修改样式,实现点赞+1的效果

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .iterm {
            padding: 50px;
            position: relative;
        }
    </style>
</head>
<body>

<div>
    <div class="iterm">
        <a onclick="zan(this)">赞1</a>
    </div>
    <div class="iterm">
        <a onclick="zan(this)">赞2</a>
    </div>
    <div class="iterm">
        <a onclick="zan(this)">赞3</a>
    </div>
    <div class="iterm">
        <a onclick="zan(this)">赞4</a>
    </div>
</div>

<script type="text/javascript">
    function zan(ths) {
        var top = 50;
        var left = 70;
        var op = 1;
        JavaScript进阶之DOM

JavaScript进阶之DOM

JavaScript进阶之DOM

JavaScript进阶之DOM

JavaScript进阶之DOM

JavaScript进阶之DOM