jQuery文档对象模型DOM的实际应用

DOM 在 JavaScript 课程中我们详细的探讨过,它是一种文档对象模型。方便开发者对 HTML 结构元素内容进行展示和修改。在 JavaScript 中,DOM 不但内容庞大繁杂,而且我们开发的过程中需要考虑更多的兼容性、扩展性。

在 jQuery 中,已经将最常用的 DOM 操 作方法进行了有效封装,并且不需要考虑浏览器的兼容性,对于之前的DOM是一颗岑天大树枝繁叶茂让我们遥不可及,那么jQuery的DOM树,就是一个简笔画的小树,所有枝叶都唾手可得。

jQuery的遍历:

祖先:

parent()

parents()

parentsUntil()

后代 :

children()

find()

兄弟:

siblings()

next()

nextAll()

nextUntil()

prev()

prevAll()

prevUntil()

过滤

eq()

养成一个习惯,如果该jQuery方法可以设置元素值,那么该方法一定可以获取元素值。

DOM元素及属性操作。

1.设置(获取)元素内容。

html()                          可以获取该元素的标签和内容

html(text) 

text(text)                     只可以获取该元素的文本内容;

text()

val(text)

val()

2.操作元素属性。(获取,设置、删除)

.attr( ) 

.attr( )的参数有几种设置方法。

1)$('div') .attr('type')获取该属性属性值

2)$('div') .attr('type','value')设置属性值

3)$('div') .attr({

     'data':'valuer1',

'data2':'value2' 

})

设置一组属性值;

4)$('div').removeAttr('title');

3.操作元素样式

css()

注:css()方法不仅能获取行内样式,也能获取非行内样式

css()                                       方法的参数有几种设置方法,

css(name)                               获取某个元素的行内样式

css([name1,name2,name3])    获取多个样式,返回值是一个数组;

css('name',value)                    设置行内样式

css({

     name1:value1,

name2:value2 

})                                        设置多个行内样式

addClass( )方法

addClass(class) 给元素添加一个class

addClass( 'class1 class2 class3' )给元素添加多个class

removeClass(class)  给元素删除一个class

removeClass('class1 class2 class3')给元素删除多个class

toggleClass(class) 如果元素没有当前class那么添加,如果有那么删除

选项卡demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <script>

$(function(){
 /*   var a=$('div').css(['width','height','background'])
    for(var i in a){
        console.log(a[i])
    }*/
   /* document.onclick=function(){
        //alert(1)
        //$('div').toggleClass('abc')
        var a = $('div').css(['width','height'])

        $.each(a,function(index,value){
            alert(value)
        })

    }*/


$('.warp>ul li').click(function(){

    $('.warp div').css('display','none')

    $('.warp div').eq($(this).index()).css('display','block')
    

})


})

    </script>
    <style>
*{
    margin: 0;
    padding: 0;
    list-style-type: none;
}
.warp{
    width: 303px;
    height: 600px;
    border: 1px solid #b6b6b6;
    margin: 0 auto;
    position: relative;
}
.warp ul{
    width: 304px;
    height: 100px;
    border-bottom: 1px solid #b6b6b6;
}
.warp ul li{
    border-right: 1px solid #b6b6b6;
    float: left;
    width: 100px;
    line-height: 100px;
    text-align: center;
}

.warp div{
    width: 303px;
    height: 500px;
    position: absolute;
    top: 100px;
    display: none;
    text-align: center;
    line-height: 500px;
    font-size: 100px;
    color: #fff;
}
.div1{
    background: red;
}
.div2{
    background: green;
}

.div3{
    background: pink;
}
.active{
    background: pink;
    display: block;
}


    </style>
</head>
<body>

    <div class="warp">
        
    <ul>


        <li>Tab1</li>
        <li>Tab2</li>
        <li>Tab3</li>



    </ul>

    <div class="div1" style="display:block">1</div>
    <div class="div2">2</div>
    <div class="div3">3</div>

    </div>

</body>
</html>

demo:

var box=$('div').css(['color','height','width']); //得到多个 CSS 样式的数组对象

for(vari in box){

     //逐个遍历出来 alert(i+':' +box[i]);

}

jquery提供了一个方法$.each()他和for in一样可以遍历对象。

$.each(obj,function(index,value){

})

css方法

width()

height()

innerWidth() 包含内边距(padding)

outerWidth()包含内边距和边框(padding border)

offset()  获取某个元素相对于浏览器窗口(可视区域的距离)

position()获取某个元素相对于父元素的偏移距离

scrollTop()获取垂直滚动条的值;

scrollTop(value)设置垂直滚动条的值;

scrollLeft()获取水平滚动条的值;

scrollLeft(value)设置水平滚动条的值;

案例: 楼梯。选项卡。

楼梯简化版

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <script>

$(function(){
 /*   var a=$('div').css(['width','height','background'])
    for(var i in a){
        console.log(a[i])
    }*/
   /* document.onclick=function(){
        //alert(1)
        //$('div').toggleClass('abc')
        var a = $('div').css(['width','height'])

        $.each(a,function(index,value){
            alert(value)
        })

    }*/


$('.nav li').click(function(){
     $(document).scrollTop($('div').eq($(this).index()).offset().top)

})


})

    </script>
    <style>
*{
    margin: 0;
    padding: 0;
    list-style-type: none;
}
.div1{
    width: 90%;
    margin: 0 auto;
    height: 700px;
    background: red;
    color: #fff;
    line-height: 700px;
    font-size: 100px;
    text-align: center;
}
.div2{
    width: 90%;
    margin: 0 auto;
    height: 700px;
    background: pink;
    color: #fff;
    line-height: 700px;
    font-size: 100px;
    text-align: center;
}
.div3{
    width: 90%;
    margin: 0 auto;
    height: 700px;
    background: green;
    color: #fff;
    line-height: 700px;
    font-size: 100px;
    text-align: center;
}
.div4{
    width: 90%;
    margin: 0 auto;
    height: 700px;
    background: blue;
    color: #fff;
    line-height: 700px;
    font-size: 100px;
    text-align: center;

}

.nav{
    width: 80px;
    height: 204px;
    position: fixed;
    right: 20px;
    bottom: 40px;
  background: #b6b6b6;

}
.nav li{
    height: 50px;
    line-height: 50px;
    text-align: center;
    font-size: 20px;
    color: #fff;
    cursor: pointer;
    border-top: 1px solid #b6b6b6;
}

    </style>
</head>
<body>
<ul class="nav">
    <li>div1</li>
    <li>div2</li>
    <li>div3</li>
    <li>div4</li>
</ul>
    <div class="div1">我是DIV1</div>
    <div class="div2">我是DIV2</div>
    <div class="div3">我是DIV3</div>
    <div class="div4">我是DIV4</div>
</body>
</html>

jQuery 节点操作

一.创建节点 为了使页面更加智能化,有时我们想动态的在 html 结构页面添加一个元素标签,那么 在插入之前首先要做的动作就是:

1.创建节点。

var box=$('<div id="box">节点</div>'); //创建一个节点 $('body').append(box); //将节点插入到<body>元素内部

2.插入节点

append(content) 向指定元素内部后面插入节点 content

appendTo(content) 将指定元素移入到指定元素 content 内部后面

prepend(content) 向指定元素 content 内部的前面插入节点

prependTo(content) 将指定元素移入到指定元素 content 内部前面

after(content) 向指定元素的外部后面插入节点 content

before(content) 向指定元素的外部前面插入节点 content

3.包裹节点

.wrap()

$('div').wrap('<strong></strong>'); //在 div 外层包裹一层 strong

$('div').wrap('<strong>123</strong>'); //包裹的元素可以带内容

$('div').wrap('<strong><em></em></strong>'); //包裹多个元素

$('div').wrap($('strong').get(0)); //也可以包裹一个原生 DOM 不推荐使用,会崩溃

$('div').wrap(document.createElement('strong')); //临时的原生 DOM

 $('div').unwrap(); //移除一层包裹内容,多个需移除多次

$('div').wrapInner('<strong></strong>'); //包裹子元素内容

4.节点操作

$('body').append($('div').clone(true)); //复制一个节点添加到 HTML 中

注:clone(true)参数可以为空,表示只复制元素和内容,不复制事件行为。而加上 true 参数的话,这个元素附带的事件处理行为也复制出来。

$('div').remove(); //直接删除 div 元素

remove()方法可以接收一个参数,过滤需要删除的元素。

$('div').replaceWith('<span>节点</span>'); //将 div 替换成 span 元素

案例1:增加表单姓名,搜索。

成绩单

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <script>

$(function(){
    $('input[type=button]').click(function(){

      var name=$('input[placeholder=请输入姓名]').val()
      var age=$('input[placeholder=请输入年龄]').val()
      var wx=$('input[placeholder=请输入微信号]').val()
      $('input[placeholder=请输入姓名]').val('')
      $('input[placeholder=请输入年龄]').val('')
      $('input[placeholder=请输入微信号]').val('')
      var $ul=$('<ul></ul>');

      $('body').append($ul);

      var $li1=('<li>姓名:'+name+'</li>');


      $ul.append($li1);

      var $li2=('<li>年龄:'+age+'</li>');

      $ul.append($li2);

      var $li3=('<li>微信号:'+wx+'</li>');

      $ul.append($li3);

    })
})
    </script>
    <style>
*{
    margin: 0;
    padding: 0;
    list-style-type: none;
}
ul:after{
   content: '';
   display: block;
   clear: both;
  
}
ul{
        max-width: 600px;
      margin:10px auto; 
      border: 1px solid #b6b6b6;

}
ul li{
    float: left;
    padding: 20px;
    /* background: #b6b6b6; */
    margin-left: 10px;

}

    </style>
</head>
<body>
    <input type="text" placeholder="请输入姓名">
    <input type="text" placeholder="请输入年龄">
    <input type="text" placeholder="请输入微信号">
    <input type="button" value='点击'>

</body>
</html>

搜索

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script>
    <script>

$(function(){
    $('input[type=button]').click(function(){
        for(var i = 0 ; i < $('li').length;i++){

            if($('li').eq(i).html()==$('input[type=text]').val()){
                $('li').eq(i).css('background','red')
            }
        }
    })
})
    </script>
    <style>
*{
    margin: 0;
    padding: 0;
    list-style-type: none;
}
ul:after{
   content: '';
   display: block;
   clear: both;
  
}
ul{
        max-width: 600px;
      margin:10px auto; 
      border: 1px solid #b6b6b6;

}
ul li{
    float: left;
    padding: 20px;
    /* background: #b6b6b6; */
    margin-left: 10px;

}

    </style>
</head>
<body>
<div class="search">
    <input type="text" placeholder="请输入搜索内容"><input type="button" value="搜索">
</div>
<ul>
    <li>杨怀智</li>
    <li>男</li>
    <li>180</li>
    <li>66</li>
</ul>
<ul>
    <li>234</li>
    <li>男</li>
    <li>180</li>
    <li>66</li>
</ul>
<ul>
    <li>12</li>
    <li>男</li>
    <li>180</li>
    <li>66</li>
</ul>
<ul>
    <li>111</li>
    <li>男</li>
    <li>180</li>
    <li>66</li>
</ul>
</body>
</html>

原文作者:祈澈姑娘;原回答:https://www.zhihu.com/question/61624754/answer/540792492:90后前端妹子,爱编程,爱运营,爱折腾。 坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351