2018.10.17-DOM元素

回顾:

1.获取

document.getElementById
document.getElementsByTagName
document.getElementsByClassName
document.querySelector
document.querySelectorAll
document.body
document.head
document.all
document.documentElement

2.offset

offsetLeft
offsetTop
offsetWidth
offsetHeight
offsetParent

3.scroll

scrollTop
scrollLeft
scrollWidth
scrollHeight

4.client

clientLeft
clientTop
clientWidth
clientHeight

5.JS 的组成 DOM BOM ECMAScript

6.DOM document object model 文档对象模型

DOM document object model 文档对象模型可以使JS具有操作页面元素的能力
DOM的顶层对象是document
JS的顶层对象是Object
BOM的顶层对象是window

7. 兼容性

高级浏览器FF 99% Chrome,苹果 80% IE 678 60%

8.DOM节点

节点是一个宽泛的概念,里面不只是只有HTML元素,元素只是其中的一部分。
HTML标签 元素节点
text 文本节点 ; innerText内容中所有的文本节点
eg: innerText内容中所有的文本节点

文本节点.jpg

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div>
        <input type="text" value="dshad">
        <ul>
            <li>snbdf</li>
            <li>asdn</li>
            <li>sidzdu</li>
        </ul>
    </div>
    <script>
        var div = document.getElementsByTagName('div')[0];
        console.log(div.innerText);   // innerText内容中所有的文本节点
    </script>
</body>
</html>

9.节点的类型 不同类型的节点nodeType的值不一样。比如元素节点的nodeType是1

文本节点的元素类型是3.
http://www.w3school.com.cn/jsref/prop_node_nodetype.asp

  • childNodes:获取所有的子节点。
  • children :获取所有的子元素。
  • parentNode:获取父节点。
  • offsetParent:获取定位父级。
    eg:获取子节点
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
<script>
    var ul = document.querySelector('ul');
    // console.log(ul.firstChild);
    // console.log(ul.firstElementChild);
    //兼容


    var child = ul.firstElementChild?ul.firstElementChild:ul.firstChild;
    console.log(child)
</script>
</html>

10.获取首尾节点

  • firstChild:IE678获取的是第一个元素节点,高级浏览器获取的是第一个节点
    (可能是文本节点)。
  • lastChild :同上,获取的是最后一个节点。
  • firstElementChild:IE678不支持,高级浏览器获取的是第一个元素节点。
    兼容的写法:
var child = ul.firstElementChild?ul.firstElementChild:ul.firstChild;

function getFirstChild(obj){
    return  obj.firstElementChild?obj.firstElementChild:obj.firstChild;
}
  • lastElementChild :同上,获取的是最后一个节点。
  • nextSibling:IE678获取的是下一个兄弟元素节点,高级浏览器获取的是下一个节点
    (可能是文本节点)。
  • nextElementSibling:IE678不支持,高级浏览器获取的是下一个兄弟元素节点。
  • previousSibling、previousElementSibling: 获取上一个兄弟节点
    eg:兄弟节点的操作(获取的内容是元素内容的下一个元素)
    兄弟节点的操作.jpg
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div class="big">
        <div id="d1"></div>
        <div id="d2"></div>
        <div id="d3"></div>
    </div>
</body>
<script>
var d2 = document.getElementById('d2');
console.log(d2.nextSibling);
console.log(d2.nextElementSibling);
</script>
</html>

11.元素属性的DOM操作方式

获取:getAttribute(名称)
设置:setAttribute(名称, 值)
删除:removeAttribute(名称)
eg:DOM操作(每过一秒钟,里面的值加一)

DOM操作.jpg

DOM操作1.jpg
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <input type="text" id="tet" value="123">
</body>
<script>
    var text = document.querySelector('input');
    //每过一秒钟,里面的值加一
    var val = text.getAttribute('value');  //getAttribute (获取) text.getAttribute(在text中继续获取)
    var timer = setInterval(function(){
        text.setAttribute('value',++val);
    },1000);
text.removeAttribute('id');
</script>
</html>

12.元素操作

createElement 创建一个标签
appendChild 在某一个标签的最后添加子元素
insertBefore(新节点,标识节点)。在标识节点之前插入一个节点
扩展:一般页面dom操作添加的元素的操作步骤?

  1. 创建
  2. 添加属性
  3. 插入

removeChild : 删除一个子节点。
replaceChild:(新节点,旧节点) 替换子节点、
node.cloneNode(bool):节点克隆;
true: 复制节点中的内容,包括子节点
false:只是赋值节点本身。
document.createDocumentFragment(): 创建文档碎片。方便DOM操作。

  • 文档碎片:类似一个临时的文档,将所有要加的dom元素先放在这里,达到不要每次操作dom元素提高页面效率
    eg:


    4.jpg
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        img{
            width:100px;
        }
    </style>
</head>
<body>

</body>
<script>
    console.time('abc');
    var img = document.createElement('img');
    img.src = 'https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1539752642719&di=4313282824eb1828aa48494f3c1b3433&imgtype=0&src=http%3A%2F%2Fpic24.photophoto.cn%2F20120723%2F0033034314132137_b.jpg';
    var sp = document.createDocumentFragment();
    for(var i =0;i<5000;i++){
        var imgsrc = img.cloneNode(true);
        sp.appendChild(imgsrc);
    }
    document.body.appendChild(sp);
    console.timeEnd('abc');
</script>
</html>

13.js运行时间检查

console.time();
console.timeEnd();
参数是这个时间计时的名称。

14.表格操作

tHead 获取表格的thead分组
tFoot 获取表格的tfoot分组
tBodies 获取表格的tbody分组(结果是数组)

rows 获取分组里面所有的行(tr)
cells 获取某行的所有(td)
eg:

5.jpg

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <table border="1" width="400">
        <thead>
            <tr>
                <th>a</th>
                <th>b</th>
                <th>c</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <td>3.33</td>
                <td>4.44</td>
                <td>5.55</td>
            </tr>
        </tfoot>
        <tbody>
            <tr>
                <td>1</td>
                <td>2</td>
                <td>3</td>
            </tr>
            <tr>
                <td>4</td>
                <td>5</td>
                <td>6</td>
            </tr>
            <tr>
                <td>7</td>
                <td>8</td>
                <td>9</td>
            </tr>
        </tbody>
    </table>
</body>
<script>
    var tb = document.getElementsByTagName('table')[0];
    console.log(tb.tBodies[0].rows[1].cells);
</script>
</html>

15.表单操作

  • 获取表单
    form.name
    form.elements
    获取控件的值

eg:form


账户名、密码框.jpg
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="1.asp" method="post">
        <input type="text" name="user_name" placeholder="请输入用户名"><br><br>
        <input type="password" name="password" placeholder="请输入密码"><br><br>
        <input type="submit"><br><br>
    </form>
</body>
<script>
var form = document.getElementsByTagName('form')[0];
form.user_name.onchange = function(){
    alert(1)
};
form.onsubmit = function(){
    return false;
};
</script>
</html>
  • 表单事件
    change
    focus
    blur
    input
    submit
    示例:模拟手机短信发送


    3.jpg

    3.1.jpg

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>模拟短信发送</title>
    <style>
        #container {
            height: 620px;
            width: 300px;
            background: url("mobile.png") no-repeat center center;
            margin: auto;
            position: relative;
        }
        #content {
            height: 375px;
            width: 236px;
            position: absolute;
            top: 100px;
            left: 32px;
            overflow: scroll;
        }
        #footer {
            margin: 0;
            position: absolute;
            left: 32px;
            bottom: 100px;
            background: #eee;
            border-top: 1px solid gray;
            border-bottom: 1px solid gray;
            width: 236px;
            text-align: center;
            display: inline;
            line-height: 39px;
        }
        #avatar {
            width: 24px;
            height: 24px;
            border: 1px solid gray;
            border-radius: 5px;
            padding: 2px;
            vertical-align: middle;
            cursor: pointer;

        }
        #message {
            height: 23px;
            width: 140px;
            font-size: 12px;
            vertical-align: middle;
        }
        #send {
            border: 1px solid gray;
            padding: 5px;
            vertical-align: middle;
            border-radius: 5px;
            font-size: 14px;
            color: gray;
            text-decoration: none;
            cursor: pointer;
        }
        #content p {
            margin: 2px;
        }
        #content span {
            font-size: 14px;
            display: inline-block;
            padding: 5px;
            border: 1px solid gray;
            border-radius: 5px;
            margin: 3px;
            max-width: 160px;
            vertical-align: top;
            word-wrap: break-word;
        }
        #content img {
            height: 24px;
            width: 24px;
            border: 1px solid gray;
            border-radius: 5px;
            padding: 2px;
            margin: 3px;
            vertical-align: top;
        }
        .text-right{
            text-align: right;
        }
        .text-right span{
            background: #eee;
        }
        .text-left{
            text-align: left;
        }
        .text-left span{
            background: green;
        }
    </style>

</head>
<body>
    <div id="container">
        <div id="content">
            <p class="text-right">
                <span >小猪说</span>
                <img src="expression1.png">
            </p>
            <p class="text-left">
                <img src="expression2.jpg">
                <span >小孩说</span>
            </p>

        </div>
        <p id="footer">
            <img id="avatar" src="expression1.png">
            <input id="message" type="text" placeholder="选头像、输文字、点发送">
            <a id="send" href="javascript:">发送</a>
        </p>
    </div>
</body>
<script>
function  $(selector){
    return  document.querySelector(selector)};
var type=true;
var head = $('#avatar');
// 猪头与小孩头像的转换
head.onclick = function(){
    if(type){
        head.src='expression2.jpg';
    }else{
        head.src='expression1.png';
    }
    type = !type;  //整个效果去反
};

// 发送
$('#send').onclick=function(){
    if(!$('#message').value){
        return flase;
    }
    var p = document.createElement('p');
    var img = document.createElement('img');
    var span = document.createElement('span');  //获取底部输入框的所以标签
    span.innerText = $('#message').value;  //设置获取的所有span的文本内容
    if(!type){
        p.className='text-left';
        img.src='expression2.jpg';
        p.appendChild(img);
        p.appendChild(span);
    }else{
        p.className='text-right';
        img.src='expression1.png';
        p.appendChild(img);
        p.appendChild(span);
    }
    $('#content').appendChild(p);
    $('#message').value = '';
};
</script>
</html>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,185评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,652评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,524评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,339评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,387评论 6 391
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,287评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,130评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,985评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,420评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,617评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,779评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,477评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,088评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,716评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,857评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,876评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,700评论 2 354

推荐阅读更多精彩内容

  • 文/落花聽雨 平淡而简单的日子在不知不觉中走过几年的时光,忙碌充实的生活节奏,在忆海沉淀情感故事的“浪花”。几多心...
    落花聽雨阅读 297评论 3 18
  • 遛狗时,在山上遇上一对老夫妇。 “这狗打理得干净,”老头搭话,“每月要花200多块吧。” “差不多吧。”我回答。 ...
    梅语稀阅读 216评论 0 1
  • 最近几天被很久没光顾的咳嗽困扰,因为还没完全给小宝断奶,一开始什么药物也没用,导致日渐加重。 一直以来因为要照顾宝...
    Anita_Tang阅读 236评论 0 1
  • 核心产  品 ————> 检测 :检测项目检测项目 ————> 指标 : 检验依据/标准/方法指  标 ————...
    dhpyy阅读 174评论 0 0
  • 风不知道何时沉落水底 没有掀起一丝涟漪 我知道 我所烦恼的 便是这沉落水底的风 失掉她 城市像没有了路标 我也渐渐...
    风中的约书亚阅读 242评论 2 1