DOM在整个网页开发中都是很关键的,它是可用于检索网页内任意元素或内容的索引目录。利用DOM提供的接口可以操作页面中的元素,还可以添加、删除以及修改元素的属性、样式、内容等。
1. 操作元素样式
虽然传统的CSS样式表可以实现对元素的修饰,但如果可以任意操作元素现有的样式,或者为元素添加新的样式,Web页面就会变得灵活多变。为此,jQuery提供了一些操作元素样式的方法。
1.1 操作样式属性
1.获取样式属性值
获取样式属性: 把需要获取的样式作为属性名传递到css()方法中,即样式值。
获取多个属性: $(selector).css([‘property1’, ‘property2’…])。
获取单个属性: $(selector).css(‘property’)。
原理:
- 以数组的形式传入css()方法中;
- 返回的结果是对象的属性名和属性值;
<div style="color: red;font-size:50px;font-family:'楷体';"> 越努力,越幸运 </div> <script> //获取多个属性的值 var obj = $('div').css(['color', 'font-size', 'font-family']); //在控制台查看obj console.log(obj); </script>
复制
2.设置样式属性值
设置样式属性: 把需要设置的样式作为参数值传递到css()方法中,即样式值。
设置多个样式属性: $(selector).css({‘property1’: ‘value’, ‘property2’: ‘value’…});
设置单个样式属性: $(selector).css(‘property’, ‘value’);
原理:
- css()方法中传入一个对象,该对象中包含多个键值对;
- 每个键值对都是元素样式属性名以及对应的属性值;
<input id="btn" type="button" value="设置样式"> <div></div> <script> $('#btn').click(function () { $('div').css({ backgroundColor: 'pink', width: '150px', height: '150px', 'border-radius': '50%' }) }); </script>
复制
3.通过函数设置样式属性值
函数设置样式属性: 每个样式属性对应的value值还可以替换为函数形式。
<!--语法--> <script> //设置单个属性 /*index ——— 元素的索引值从0开始 value ——— 元素样式属性的当前值 newValue ——— 函数的返回值 */ $(selector).css('property', function (index, value) { return nweValue; }); //设置多个属性 $(selector).css({ 'property1': function (index, value2) { return newValue; }, 'property2': function (index, value2) { return newValue; } }); </script> <!--示例--> <script> //将div的宽度修改为原div宽度的2倍。 $('div').css('width',function(index,value){ return parseFloat(value)*2+'px'; }); //将第4个div的宽度修改为原div宽度的2倍 $('div').css('width',function(index,value){ if(index==3){ return parseFloat(value)*2+'px'; } }) </script>
复制
<input id="btn" type="button" value="设置样式"> <div></div> <div></div> <script> $('div').css({ backgroundColor: 'pink', width: '100px', height: '50px', 'border-radius': '50%' }); //在原有样式的基础上,为div元素新样式 $('#btn').click(function () { $('div').css({ width: function (index, value) { return parseFloat(value) * 2; }, height: function (index, value) { //为索引值为1的匹配元素设置高度 if (index === 1) { return parseFloat(value) * 2; } } }); }); </script>
复制
1.2操作元素类
jQuery提供了专门的操作类的方法,包括添加类、移除类、切换类以及判断某个类是否存在等常用的方法。
方法 | 描述 |
---|---|
addClass() | 将指定的类添加到匹配元素中 |
removeClass() | 从所有匹配的元素中删除全部或者指定的类 |
toggleClass() | 对设置或移除被选元素的一个或多个类进行切换 |
hasClass() | 确定是否有匹配的元素被分配了给定类 |
1.addClass()方法
<script> //添加单个类“c” $(selector).addClass('c'); //添加多个类c1、c2、c3 $(selector).addClass('c1 c2 c3'); </script>
复制
addClass()方法: 在保留已有的样式上,再去添加新的一些样式。
添加多个类: 使用空格隔开,调用addClass()方法后,元素将具备这三个类定义的样式。
2.removeClass()方法
在网页开发中,有时需要移除一些元素已经存在的类,需要用removeClass()方法 。
removeClass()的参数:
- 是可选的,不传递参数时,会移除当前元素的所有类名。
- 一次移除指定的多个类时,需要使用空格隔开。
<script> //移除所有类 $(selector).remove(); //移除单个类 $(selector).remove('c1'); //移除多个类 $(selector).remove('c1 c2 c3'); </script>
复制
<div></div> <script> var div = $('div'); //添加单个类 div.addClass('c1'); //输出结果:<div class='c1'></div> console.log(div[0].outerHTML); //添加多个类 div.addClass('c2 c3'); //输出结果:<div class='c1 c2 c3'></div> console.log(div[0].outerHTML); //移除单个类 div.remove('c1'); //输出结果:<div class='c2 c3'></div> console.log(div[0].outerHTML); //移除所有类 div.remove(); //输出结果:<div class=''></div> console.log(div[0].outerHTML); </script>
复制
注意:
css()方法与addClass()、removeClass()方法虽然都可以改变元素的样式,但适用的场景不同。建议使用addClass()、removeClass()对类进行操作,而css()方法适合CSS样式值不固定的情况。例如,为元素随机生成背景色。
3.toggleClass()方法
toggleClass()方法: 在网页开发中,当用户在多个标签中,选择一个标签时,会增加特定的样式,否则,取消该样式。
- $(selector).toggleClass(‘c’),参数c表示一个自定义的类。
- 指定元素中若没有c,则添加,否则执行移出操作。
- addClass()和removeClass()方法虽然可以实现,但不够简便。
- 直接对元素的类进行切换。
<div></div> <script> /*匹配到的元素对指定的类名进行切换无则加, 否则去掉。outerHTML用于获取元素内的html 内容和文本。 */ var div = $('div'); //第一次调用 div.toggleClass('c'); //输出结果:<div class='c'></div> console.log(div[0].outerHTML); //第二次调用 div.toggleClass('c'); //输出结果:<div class=''></div> console.log(div[0].outerHTML); //第三次调用 div.toggleClass('c'); //输出结果:<div class='c'></div> console.log(div[0].outerHTML); </script>
复制
toggleClass()方法: 还支持使用第2个参数手动控制类的添加或移除。
参数: 是一个布尔值,若值为true表示添加类,值为false表示移除类。
<script> //添加类 $(selector).toggleClass('c',true); //移除类 $(selector).toggleClass('c',false); //条件返回值 $(selector).toggleClass('c',条件判断); </script>
复制
<script> //案例演示:还可以通过条件判断的返回值情况设置 var count=0; $('div').click(function(){ $(this).toggleClass('c',++count%3 === 0); }); </script>
复制
扩展:在操作元素类的方法中使用函数
jQuery中用于操作元素类的addClass()、removeClass()、toggleClass()方法,都支持使用函数作为参数,通过函数的返回值来操作元素的类
<script> //addClass()方法 $('div').addClass(function (index, value) { console.log('元素的索引:' + index); console.log('元素原来的class值;' + value); return 'item-' + index;//将返回值作为要添加的class }); //removeClass()方法 $('div').removeClass(function (index, value) { return 'item-' + index;//将返回值作为要移除的class }); //toggleClass()方法 $('div').toggleClass(function (index, value) { return 'item-' + index;//将返回值作为要移除的class }); </script>
复制
<!--示例--> <style> .c1 { color: blue; } .c2 { color: red; } .c3 { color: yellow; } </style> <body> <div>How</div> <div>are</div> <div>you?</div> <script> $('div').toggleClass(function (index, value) { if (index === 0) { return 'c3'; } else if (index === 1) { return 'c2'; } else if (index === 2) { return 'c1'; } }); </script> </body>
复制
4.hasClass()方法
在网页开发过程中,有时需要判断元素的某个类是否存在,然后执行某些操作。
语法: $(selector).hasClass(‘c’);
分析: 必选参数c用于检测该类名是否存在,存在时返回true,否则返回false。
<style> .c { color: pink; } </style> <body> <div>test</div> <script> $('div').click(function () { if ($(this).hasClass('c')) { $(this).removeClass('c'); } else { $(this).addClass('c'); } }); </script> </body>
复制
1.3操作元素的尺寸
元素尺寸的操作是Web开发中常用的功能之一,例如登录框的拖拽特效、图片的放大等功能。
方法 | 描述 |
---|---|
width() | 获取或设置元素的宽度 |
height() | 获取或设置元素的宽度 |
innerWidth() | 获取元素的宽度(包括内边距) |
innerHeight() | 获取元素的高度(包括内边距) |
outerWidth() | 获取元素的宽度(包括内边距和边框) |
outerHeight() | 获取元素的高度(包括内边距和边框) |
outerWidth(true) | 获取元素的宽度(包括内边距、边框和外边距) |
outerHeight(true) | 获取元素的高度(包括内边距、边框和外边距) |
1.操作元素的宽度
width()方法: 包括设置元素的宽度和获取元素的宽度。
<script> $(selector).width(); //获取宽度 $(selector).width('30px'); //设置宽度 </script>
复制
注意:
在设置宽度时,参数的引号可以省略。但是如果不添加引号,里面传递的只能是数字,不能包含单位,如果包含单位就会出现语法错误。
height()方法: 包括设置元素的高度和获取元素的高度。
<script> $(selector).height(); //获取高度 $(selector).height('30px'); //设置高度 </script>
复制
<style> div { width: 100px; height: 100px; background: darkorange; border-radius: 25%; color: aliceblue; text-align: center; padding: 10px; line-height: 25px; } </style> <body> <input type="button" value="按钮"> <div>只要努力,人生的长度和宽度都可以改变</div> <script> //使用width()方法和height()方法在原div元素宽高的基础上增加了50像素。 $('input').click(function () { $('div').width($('div').width() + 50); $('div').height($('div').height() + 50); }); </script> </body>
复制
2.获取元素的内部宽度和高度
jQuery中innerWidth()和innerHeight()方法也是用于获取元素的宽度和高度。
与width()方法和height()方法不同的是: 这两个方法包括元素的内边距。
需要注意:width()和height()不传递参数时,表示获取元素宽度和高度;传递参数时设置值,参数的引号可以省略,如果省略只能传递数字不能包含单位,否则会出现语法错误。
3.获取元素外部的宽度和高度
outerWidth()和outerHeight()方法也可获取元素的宽度和高度。
与width()方法和height()方法不同的是:
- 只是除了元素本身的宽高值,还包括内边距和边框值。
- 若在调用方法时传递参数true,获取到的结果中还会包含元素的外边距。
<style> body { border: 1px solid #ccc; } div { width: 100px; height: 100px; background: red; padding: 10px; border: 5px solid pink; margin: 20px; } </style> <body> <input type="button" value="获取元素的高度"> <div>人人都是主角,过着属于自己楚门的世界</div> <script> $('input').click(function () { console.log($('div').width()); console.log($('div').height()); console.log($('div').innerWidth()); console.log($('div').innerHeight()); console.log($('div').outerWidth()); console.log($('div').outerHeight()); console.log($('div').outerWidth(true)); console.log($('div').outerHeight(true)); }); </script> </body>
复制
div元素的外边距margin: 上下左右都是20像素。
带有参数true的outerWidth()方法和outerHeight()方法:
- 与不带有参数的这两个方法取得的外部元素宽高值,相差了40像素;
- 这40像素就是div元素的外边距。
1.4.操作元素的位置
jQuery提供了专门的操作元素位置的方法,可以操作元素在页面中的位置以及相对滚动条的位置等,包括offset()、position()、scrollLeft()等方法。
方法 | 描述 |
---|---|
offset() | 获取匹配元素的第一个元素的坐标位置,或设置每个元素的坐标 |
offsetParent() | 获取距离匹配元素最近的含有定位信息的元素 |
position() | 获取匹配元素相对父元素的偏移 |
scrollLeft() | 获取或设置匹配元素相对滚动条左侧的偏移 |
scrollTop() | 获取或设置匹配元素相对滚动条顶部的偏移 |
1.offset()方法
offset()可以获取匹配元素的第一个元素的坐标位置。若元素的样式属性display设置为none,则获取到的值为0.
语法:
$(selector).offset();
复制
获取和设置div元素的位置:
<style> div { width: 200px; height: 100px; background: blue; } </style> <body> <div></div> <script> //获取div的top和left值 console.log($('div').offset()); console.log($('div').offset().left); console.log($('div').offset().top); //设置div的left和top值 //向下移动100像素并向右移动200像素 $('div').offset({ left: 200, top: 100 }); //向右移动200像素 $('div').offset({ left: 200 }); //再次获取div的top和left值 console.log($('div').offset().left); console.log($('div').offset().top); </script> </body>
复制
2.offsetParent()方法
offsetParent()方法回距指定元素最近的“被定位”的祖辈元素对象。“被定位”是指元素的样式属性中position属性的值为relative、absolute或fixed,不包括position属性的默认值static。
语法:
$(selector).offsetparent();
复制
<body> <button>设置背景颜色</button> <div style="border:1px solid black; width:70%; position:absolute; left:10px; top:50px"> <div style="border:1px solid black; margin:50px; background-color:yellow"> <p>点击按钮这一段的设置第一个定位的父元素的背景颜色。</p> </div> </div> <script> $('button').click( function () { $('p').offsetParent().css('backgroundColor', 'green') } ) </script> </body>
复制
3.scrollLeft()和scrolTop()方法
scrollLeft()和scrolTop()方法可以获取或者设置指定元素相对滚动条左侧和顶部的偏移值。
//获取元素相对左侧的偏移值 $(selector).scrollLeft(); //获取元素相对顶部的偏移值 $(selector).scrollTop();
复制
<style> div { background: green; border: 3px solid #999; width: 200px; height: 100px; overflow: auto; } p { background: pink; margin: 10px; width: 1000px; height: 1000px; } </style> <body> <input type="button" value="按钮"> <div> <p>行动好过语言</p> </div> <script> $('input').click(function () { $('div').scrollLeft(500); $('div').scrollTop(50); }); </script> </body>
复制
2.操作元素属性
元素属性是指当前元素节点的属性,
常用的元素属性:
- 有id、value、type;
- 以及用于标识元素状态的checked、disabled等;
2.1 获取和设置元素的属性值
1.获取元素属性值
获取元素属性值: 即把需要获取的属性名传递到attr()方法中。
语法:
$(selector).attr('property')
复制
语法分析:
- property可以是元素的样式属性,如style等;
- 也可以是其他属性,如value等;
- 利用attr()方法可以操作元素的任意属性;
2.设置元素属性值
设置元素属性即通过给元素设置属性名和属性值来改变元素。
设置多个属性:
$(selector).attr({‘property1’: ‘value1’, ‘property2’: ‘value2’, …… });
复制
设置单个属性:
$(selector).attr('property', 'value');
复制
语法分析:
- property表示属性的名称;
- value表示属性的值;
- 具体用法和前面学习的css()方法相似;
<!--attr()方法设置和获取元素的属性的使用。--> <body> <input type="button" value="按钮一" class="btn1"> <input type="button" value="按钮二" class="btn2"> <script> $('.btn1').click(function () { console.log($('.btn2').attr('type')); $('.btn2').attr('type', 'checkbox'); }) </script> </body>
复制
<!-- 将class值等于btn2的type属性设置为text; 将value属性的默认值设置为“我是文本框” --> <body> <input type="button" value="按钮一" class="btn1"> <input type="button" value="按钮二" class="btn2"> <script> $('.btn1').click(function () { $('.btn2').attr({ 'type': 'text', 'value': '我是文本框' }); }) </script> </body>
复制
2.2 设置元素的状态属性
jQuery中attr()方法的参数为元素状态属性时,可以用于设置元素状态;
举例: 复选框是否选中的状态,文本框或者提交按钮的启用与禁用状态等。
属性 | 描述 |
---|---|
checked | 获取或设置表单元素的选中状态 |
disabled | 获取或设置表单元素的禁用状态 |
selected | 获取或设置下拉框的选中状态 |
<body> <!-- 第1个没有定义checked属性,默认未选中; 其余两个默认都是选中的状态; --> <input type="checkbox"> <input type="checkbox" checked=""> <input type="checkbox" checked="checked"> <script> //获取表单元素的选中状态 /* 第1个input控件会返回undefined, 其余两个input控件则返回checked。 */ $('input:eq(0)').attr('checked'); $('input:eq(1)').attr('checked'); $('input:eq(2)').attr('checked'); //设置表单元素的选中状态 /* 无论将checked属性设置值为checked还是true, 都可以设置元素为选中状态。 */ $('input').attr('checked', 'checked'); $('input').attr('checked', 'true'); </script> </body>
复制
3.操作元素内容
jQuery中还提供了一些方法,可以操作元素内容。
举例: 设置或者返回元素的文本值、表单的字段值等。
3.1 获取和设置元素的HTML内容和文本
html()和text()方法都可以用来为元素设置文本内容。
区别: html()方法操作的元素内容包含标签,text()方法操作的内容不含标签。
方法 | 参数 | 返回值 |
---|---|---|
html() | 无参数 | 用于获取元素的HTML内容 |
字符串 | 用于设置元素的HTML内容 | |
text() | 无参数 | 用于获取元素的文本内容 |
字符串 | 用于设置元素的文本内容 |
<body> <!-- 分别使用html()方法和text()方法为p元素设置文本内容。 --> <p id="p1"></p> <p id="p2"></p> <hr> <p id="p3"></p> <p id="p4"></p> <script> //没有带元素 $("#p1").html('hello world!'); $('#p2').text('hello world!'); //带元素 $("#p3").html('<h3>hello world!</h3>'); $('#p4').text('<h3>hello world!</h3>'); </script> </body>
复制
3.2获取和设置表单的值
val()方法:
- 可以获取和设置表单元素的值;
- 相当于JavaScript中input控件对象value属性的作用;
- value表示表单元素的value属性的值,selector一般是指表单元素。
//获取表单元素的值 $(selector).val(); //设置表单元素的值 $(selector).val(value);
复制
<body> <input type="text" class="txt"> <input type="button" value="按钮" class="btn"> <div></div> <br> <hr><br> <input type="text" class="txt1"> <input type="button" value="按钮" class="btn1"> <div></div> <script> //text()方法 $('.btn').click(function () { $('div:eq(0)').text($('.txt').val()); $('.txt').val(''); }) //html()方法 $('.btn1').click(function () { $('div:eq(1)').html($('.txt1').val()); $('.txt1').val(''); }) </script> </body>
复制
4 操作DOM节点
如果需要更灵活的操作网页上的动态效果很多时候需要直接操作DOM节点。
比如: 如在网页中的某个位置动态添加a链接。
4.1创建节点
jQuery提供了动态创建节点的方法,创建节点后返回jQuery对象。
1. $()函数
$()函数在jQuery中有很多作用。$()实际可以成为工厂函数,通过此函数可以返回选择器对象,能够产生对象。
语法:
$(‘HTML代码’);
复制
举例:
- 将DOM对象转换成为jQuery对象;
- 将HTML代码转换成DOM对象,并将其包装成jQuery对象;
//例如:将obj对象传入append()方法中,便可以在DOM中插入节点。 var p =$('<p>这是一个段落</p>'); $('body').append(p);
复制
2. html()方法
html()方法可用来设置或返回所选元素的HTML内容。
html(‘HTML代码’) : 可以在DOM中动态创建节点。
其作用: 与JavaScript中的 innerHTML属性类似。
语法:
$(selector).html('HTML代码');
复制
//示例 $('body').html('<p>这是一个段落</p>');
复制
<style> div { width: 200px; height: 100px; background-color: yellow; } </style> <body> <!-- 案例演示:jQuery中创建节点的两种方式$()函数和html()方法。 --> <input id="btn" type="button" value="创建节点"> <div id="dv"></div> <script> $('#btn').click(function () { $('#dv').html('<a href="#">腾讯</a><br/>'); var aObj = $('<a href="#">阿里</a><br/>'); $('#dv').append(aObj); }); </script> </body>
复制
4. 2 插入节点
jQuery提供了一些方法用于将创建好的节点插入到DOM的不同位置。
例如: 前面用过的append()方法。
方法 | 描述 |
---|---|
append(ele) | 用于在匹配元素的最后一个子元素后插入ele,插入ele作为匹配元素的最后一个子元素 |
prepend(ele) | 用于在匹配元素的第一个子元素前面插入ele,插入的ele作为匹配元素的第一个子元素 |
appendTo(ele) | 将匹配元素插入到ele中,该匹配元素作为ele的最后一个子元素 |
prependTo(ele) | 将匹配元素插入到ele中,该匹配元素作为ele的第一个子元素 |
before(ele) | 在匹配元素前面插入ele元素 |
insertBefore(ele) | 将匹配元素插入到ele之前 |
after(ele) | 在匹配元素后面插入ele元素 |
insertAfter(ele) | 将匹配元素插入到ele之后 |
<!--HTML代码--> <nav> <ul> <li>序列号1</li> <li>序列号2</li> <li>序列号3</li> </ul> </nav>
复制
1.append()和appendTo()方法
-
append()和appendTo()方法区别在于这两个方法的调用对象不同
-
不同之处在于:内容和选择器的位置,以及 append() 能够使用函数来附加内容。
//append()方法 var $p ='<p>插入的节点</p>'; //将新创建的p节点插入到nav容器的内部底部 $('nav').append($p);
复制
//appendTo()方法 var $p ='<p>插入的节点</p>'; //将新创建的p节点插入到nav容器的内部底部 $($p).appendTo('nav');
复制
<!--append()和appendTo()方法运行结果--> <nav> <ul> <li>序列号1</li> <li>序列号2</li> <li>序列号3</li> </ul> <p>插入的节点</p> </nav>
复制
2.prepend()和prependTo()方法
- prepend()和prependTo()方法区别在于这两个方法的调用对象不同
//prepend()方法 var $p = '<p>插入的节点</p>'; //将新创建的p节点插入到nav容器的内部顶部 $('nav').prepend($p);
复制
//prependTo()方法 var $p = '<p>插入的节点</p>'; //将新创建的p节点插入到nav容器的内部顶部 $($p).prependTo('nav');
复制
<!--prepend()和prependTo()方法运行结果--> <nav> <p>插入的节点</p> <ul> <li>序列号1</li> <li>序列号2</li> <li>序列号3</li> </ul> </nav>
复制
3.after()和insertAfter()方法
- after()和insertAfter()方法区别在于这两个方法的调用对象不同
//after()方法 var $p = '<p>插入的节点</p>'; //将新创建的p节点插入到ul元素之后 $('ul').after($p);
复制
//insertAfter()方法 var $p = '<p>插入的节点</p>'; //将新创建的p节点插入到ul元素之后 $($p).insertAfter('ul');
复制
<!--after()和insertAfter()方法运行结果--> <nav> <ul> <li>序列号1</li> <li>序列号2</li> <li>序列号3</li> </ul> <p>插入的节点</p> </nav>
复制
4.before()和insertBefore()方法
- before()和insertBefore()区别在于这两个方法的调用对象不同
//before()方法 var $p = '<p>插入的节点</p>'; //将新创建的p节点插入到ul元素之前 $('ul').before($p);
复制
//insertBefore()方法 var $p = '<p>插入的节点</p>'; //将新创建的p节点插入到ul元素之前 $($p).insertBefore('ul');
复制
<!--before()和insertBefore()方法运行结果--> <nav> <p>插入的节点</p> <ul> <li>序列号1</li> <li>序列号2</li> <li>序列号3</li> </ul> </nav>
复制
4.3 删除节点
在网页开发中,有时需要动态的删除某个节点。
1.remove()方法
方法 | 描述 |
---|---|
remove() | 从DOM中删除所有匹配的元素 |
detach() | 从DOM中删除所有匹配的元素 |
empty() | 删除匹配的元素集合中所有的子节点 |
remove()方法: 待删除元素对象调用remove()方法即可完成删除操作。
语法:
$('p').remove();
复制
语法分析:
- $(‘p’)用于获取待删除的元素对象。
- 只会从DOM中移除匹配到的元素,但该元素还存在于jQuery对象中。
注意:
jQuery对象中不会保留元素的jQuery 数据。例如,被删除的p元素如果绑定了事件或有附加的数据等都会被移除。
2.detach()方法
detach()方法: detach()方法的使用方式与remove()基本相同。
区别:
- detach()方法不仅会保留jQuery对象中的匹配元素;
- 还会保留该元素所有绑定的事件以及附加的数据。
var obj =$(selector).detach(); //删除元素节点 $(obj).appendTo(selector); //恢复元素节点
复制
<button id="btn1">删除段落</button> <button id="btn2">恢复段落</button> <p>今天天气不错!</p> <script> $('#btn1').click(function () { $p = $('p').detach(); }); $('#btn2').click(function () { $($p).appendTo('body') }) </script>
复制
3.empty()方法
empty()方法: 清空元素中的所有后代节点。
与remove()和detach()方法不同: empty()方法并不是删除节点。
//清除div元素中的所有内容 $('div').empty();
复制
<!--html页面--> <ul id="ul1"> <li><span>序列号1</span></li> <li><span>序列号2</span></li> <li><span>序列号3</span></li> </ul> <ul id="ul2"> <li><span>序列号1</span></li> <li><span>序列号2</span></li> <li><span>序列号3</span></li> </ul>
复制
//删除序列号2列表项 $('#ul1 li:eq(1)').remove(); //删除序列号3列表项的内容 $('#ul2 li:eq(1)').empty();
复制
4.4 复制节点
jQuery提供一个clone()方法,专门用于处理DOM节点的复制。
语法:
$(selector).clone();
复制
语法分析:
- 参数selector可以是选择器或HTML内容;
- 调用clone()方法后会生成一个被选元素的副本;
- 该副本需要利用插入节点的方法才能显示到DOM中;
<style> div { width: 300px; height: 100px; background-color: palegoldenrod; margin-top: 20px; } </style> <body> <input type="button" value="复制节点" id="btn"> <div id="dv"> <span>星星之火可以燎原</span> </div> <div id="dv1"></div> <script> $('#btn').click(function () { //复制第一个div中的span元素生成副本 var spanObj = $('#dv>span').clone(); //设置副本的样式 spanObj.css('fontSize', '30px'); $('#dv1').append(spanObj); }) </script> </body>
复制
4.5 替换节点
replaceWith()和replaceAll()方法: 替换元素或元素中的内容
其区别: 在于调用方法的对象以及参数设置的不同。
语法分析:
- content可以是DOM元素对象或HTML内容。
$(selector).replaceWith(content); //replaceWith()语法 $(content).replaceAll(selector); //replaceAll()语法
复制
例如: 将p元素替换为span元素。
分析:
- replaceWith()方法的调用对象是待替换的元素对象。
- replaceAll()方法的使用正好与之相反。
$('p').replaceWith('<span>替换喽</span>');//实现方式一 $('<span>替换喽</span>').replaceAll('p');//实现方式二
复制
<style> div { width: 200px; height: 50px; background-color: palegoldenrod; margin-top: 20px; } </style> <body> <input type="button" value="替代元素" id="btn"> <div id="dv">没有永远的朋友</div> <div id="dv1">只有永恒的利益</div> <script> $('#btn').click(function(){ $('#dv').replaceWith('<div>世界之所以美好</div>'); $('<div>主要原因是有着团结奋斗的热血青年</div>').replaceAll('#dv1'); }); </script> </body>
复制
4.6 包裹节点
包裹节点是指在某个元素的外层添加父元素,将其“包裹”起来。
<!--HTML页面--> <ul> <li>成都</li> <li>乐山</li> <li>宜宾</li> </ul>
复制
1.wrap()方法
wrap()方法用于为每个匹配到的元素添加父元素,将匹配元素包裹在其中。
语法:
$(selector).wrap(wrapper);
复制
语法分析: 参数wrapper表示包裹元素的结构化标记。
$('li').wrap('<strong></strong>');
复制
<!--wrap()方法运行结果--> <ul> <strong><li>成都</li></strong> <strong><li>乐山</li></strong> <strong><li>宜宾</li></strong> </ul>
复制
2.wrapAll()方法
wrapAll()方法: 将所有匹配元素一起包裹起来。
语法:
$(selector).wrapAll(wrapper);
复制
语法分析: 参数wrapper表示包裹元素的结构化标记。
$('li').wrapAll('<strong></strong>');
复制
<!--wrapAll()方法运行结果--> <ul> <strong> <li>成都</li> <li>乐山</li> <li>宜宾</li> </strong> </ul>
复制
3.wrapInner()方法
wrapInner()方法: 为匹配元素添加子元素并且包裹匹配元素中的所有内容。
语法:
$(selector).wrapInner(wrapper);
复制
语法分析: 参数wrapper表示包裹元素的结构化标记。
$('li').wrapInner('<strong></strong>')
复制
<!--wrapInner()方法运行结果--> <ul> <li><strong>成都</strong></li> <li><strong>乐山</strong></li> <li><strong>宜宾</strong></li> </ul>
复制
4.7遍历节点
在DOM元素操作中,为ul元素下的li元素内容都为添加内容。
代码实现:
$(‘ul li’).text('测试');
复制
代码分析:
-
我们并没有去取得所有li元素然后循环添加;
-
这种实现方式被称为“隐式迭代”。它是通过jQuery内部机制实现的;
-
一般适用于对指定的元素做相同操作的处理;
1.each()方法
在实际开发中,有些需求是“隐式迭代”所不能处理的。
例如: 为ul元素下的奇数行li元素添加内容。
解决方案: 通过jQuery提供的each()方法遍历所有元素,并进行相关的处理。
语法:
$(selector).each(function(index,element){});
复制
语法分析:
- index表示遍历索引,索引默认从0开始;
- element表示当前元素,一般使用this关键字表示当前元素;
<body> <ul> <li>刘三</li> <li>赵四</li> <li>王小五</li> </ul> <script> //获取第2个li元素中的文本内容 $('li').each(function(index){ if(index == 1){ console.log($(this).text()); } }) </script> </body>
复制
<style> ul li { width: 60px; height: 100px; background-color: green; list-style-type: none; float: left; margin-left: 10px; } </style> <body> <ul id="uu"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> </ul> <script> //让ul列表中的每个li元素的背景色由浅入深。 $('#uu>li').each(function (index, element) { //改变每个元素的透明度 $(element).css('opacity', (index + 1) / 10); }) </script> </body>
复制
扩展:jQuery链式编程
利用jQuery获取DOM元素以后,可以对该元素对象进行一系列操作,并且所有操作可以通过点号“.”的形式连接在一起形成一句代码,这种类似“链条”的调用方式称之为链式编程。
- “$(‘#pic’).css(‘border’, ‘solid 1px#FF00030’)”代码执行后,会返回当前元素的jQuery对象,这个jQuery对象与$(‘#pic’)返回的结果相同,所以可以直接使用“.”调用attr()方法。
//没有使用链式 $('#pic').css("border",'1px solid red'); $('#pic').attr('alt','myPhoto'); //使用链式 $('#pic').css("border",'1px solid red').attr('alt','myPhoto');
复制
<!--修改div元素下的第4个p元素的内容--> <body> <div> <p>0</p> <p>1</p> <p>2</p> <p>3</p> </div> <script> $('div').find('p').eq(3).html('我的索引值为3的元素') </script> </body>
复制
注意:
jQuery之所以可以实现链式编程,就是因为每个函数或方法被调用后返回的都是jQuery对象,在jQuery对象上可以继续调用jQuery方法执行其他操作。但是链式编程的语句不宜过长,否则会造成代码难以阅读的问题。