03-老马jQuery教程-DOM操作
jQuery DOM操作
在没有jQuery之前,DOM的操作相对来说有点麻烦,尤其是DOM节点的搜索。目前我们已经学习了jQuery的选择器,接下带大家一块学习jQuery的DOM操作,jQuery对DOM操作的封装让我们前端开发工作非常简便、简洁、兼容性好。比如:属性操作统一化:直接attr
方法既可以设置属性也可以读取属性。
1.jQuery操作DOM的属性
1.1 读取属性值
在DOM时代,我们可以通过DOM.getAttribute('attNamn')
获取DOM的属性节点。可以通过DOM.setAttribute('title','22');
设置属性内容。
jQuery的包装对象(jQuery.fn原型对象)提供了attr�(name, value)
方法可以读取和设置属性内容。
attr(attrName)
方法接受一个字符串参数,就是属性的名称,返回值是属性值,如果dom元素没有此属性则返回undefined。
<p k="3">3</p>
<p k="4">4</p>
<input type="checkbox" checked name="ckb" id="ckb1">
<input type="checkbox" name="ckb" id="ckb2">
<script>
$(function(){
// 读取第一个p标签的属性k的值
console.log($('p:first').attr('k')); // 3
// 读取第一个p标签的id属性值,不存在此属性返回undefined
console.log($('p:first').attr('id')); // undefined
// 特殊的单独的属性:checked、selected、multiple、readOnly、autofocus 返回属性名字
console.log($('#ckb1').attr('checked')); // chekced
console.log($('#ckb2').attr('checked')); // undefined !!!不是false
// 应对attr获取checked属性为undefined的问题,jQuery新增的prop方法
// 仅仅用于checked、selected、multiple、readOnly、autofocus 等属性
console.log($('#ckb2').prop('checked')); // false
});
</script>
1.2 设置属性值
设置属性还是用attr()
方法,此方法有多个重载,可以穿两个参数属性名和属性值,也可以传键值对对象,甚至可以传一个方法进行处理。
attr(name,value)
简单设置属性的方法,接受两个字符串参数,第一个是属性名,第二个是属性值。
// 设置p1标签的类为box
$('#p1').attr('class','box');
// 为所有图像设置src属性。
$("img").attr("src", "test.jpg");// 默认隐式迭代
attr(Object)
键值对形式的设置对象参数
// 为所有图像设置src和alt属性。
$("img").attr({ src: "test.jpg", alt: "Test Image" });// 默认隐式迭代
attr(key, func)
函数方式处理设置参数
func回调函数:一个参数为当前元素的索引值,第二个参数为原先的属性值。函数的返回值作为新的属性值。
//把src属性的值设置为title属性的值
$("img").attr("title", function(index, oldAttr) {
return this.src;
});
// 将p标签的k属性值加上 当前标签的索引和-
$('p').attr('k', function(index, attr){
return index + '-' + attr;
});
- 特殊的单个属性的设置(checked、selected、disabled等)
<input type="checkbox" name="ckb" id="ckb2">
<script>
$(function(){
$('#ckb2').attr('checked', 'checked');
console.log($('#ckb2').attr('checked')); // checked
console.log($('#ckb2').prop('checked')); // true
$('#ckb2').attr('disabled', 'disabled');
console.log($('#ckb2').attr('disabled')); // disabled
console.log($('#ckb2').prop('disabled')); // true
// prop方法设置 和 读取的属性值都是boolean类型
$('#ckb2').prop('disabled', false);
$('#ckb2').prop('checked', true);
});
</script>
1.3 关于prop方法和attr的区别
jQuery为映射DOM自身的固有属性添加了prop
方法,用法跟attr
方法用法一致。但是prop
方法在处理单个属性的获取和设置时非常方便,比如:disabled、checked、selected、multiple、readOnly、autofocus
等。
prop
和 attr
区别:
- attr可以用于任何的属性读写,包括自定义属性
- prop用意就是应用于DOM对象固有的属性,也就是prop用于读取和设置DOM对象中已经定义的标准属性。
- prop对于单个属性返回值是boolean类型,具体类型参考DOM对象的属性的类型。
- attr返回的值都是string类型
// attr设置样式类
$('p').attr('class', 'box'); // 默认隐式迭代
// DOM中样式类是className不是 class关键字
$('p').prop('className', 'box');// 默认隐式迭代
以下是官方建议attr(),prop()的使用:【√推荐,○不推荐】
Attribute/Property | .attr() | .prop() |
---|---|---|
accesskey | √ | ○ |
align | √ | ○ |
async | √ | √ |
autofocus | √ | √ |
checked | √ | √ |
class | √ | ○ |
contenteditable | √ | ○ |
draggable | √ | ○ |
href | √ | ○ |
id | √ | ○ |
label | √ | ○ |
location | √ | √ |
multiple | √ | √ |
readOnly | √ | √ |
rel | √ | ○ |
selected | √ | √ |
src | √ | ○ |
tabindex | √ | ○ |
title | √ | ○ |
type | √ | ○ |
width | √ | ○ |
1.4 移除属性removeAttr(attr)
移除属性非常简单直接用下面代码
$("img").removeAttr("src");
2. 内容操作html()和text()
2.1 设置标签内部的html内容html()
DOM时代设置标签内部的html内容是使用DOM对象的 innerHTML
属性。
jQuery包装对象封装了html()
方法用于读取和设置,而且实现了默认隐式迭代机制。
语法:html([val|fn])
- 读取标签html内容:
html()
<div class="box">
<a href="https://chuanke.baidu.com/s5508922.html">老马学校</a>
</div>
<script>
$(function(){
$('.box').html(); // 获取box样式类里面的html文本
//返回: <a href="https://chuanke.baidu.com/s5508922.html">老马学校</a>
});
</script>
- 设置标签html的内容:
html(str)
$('#box').html('<p>你好</p>');
// 等价于DOM的innerHTML属性设置值
$('#box')[0].innerHTML = '<p>你好</p>';
- 回调函数设置标签html内容:
html(func)
func(index,html)接收两个参数,index为元素在集合中的索引位置,html为原先的HTML值.返回值作为新的innerHTML的内容。
$("p").html(function (n, oldHTML) {
return oldHTML + n;
});
2.2 设置和读取文本text()
DOM时代获取和读取标签的文本有兼容问题,ie需要用innerText
而ff等浏览器需要用textContext
属性.jQuery做好了兼容的处理,直接调用text()
方法就行了。
- 读取标签的text文本方法:
text()
$('p').text();
- 设置标签的text文本
text(str)
$("p").text("Hello world!");
- 设置标签的文本
text(func)
func(index, text)
此函数返回一个字符串。接受两个参数,index为元素在集合中的索引位置,text为原先的text值.
$("p").text(function(n){
return "这个 p 元素的 index 是:" + n;
});
2.3 设置和读取表单元素的value属性val()
在 jQuery 1.2 中,可以返回任意元素的值了。包括select。如果多选,将返回一个数组,其包含所选的值。此方法对象
读取表单元素的value属性:
$("input").val();
设置表单元素的值:
$("input").val("hello world!");
回调函数设置值
$('input:text.items').val(function() {
return this.value + ' ' + this.className;
});
3. 样式类操作
3.1 样式类型属性操作
前面讲的attr()
和prop()
方法都可以直接设置样式类属性。
$('p').attr('class', 'box');
$('p').prop('className', 'box');
3.2 添加样式类方法addClass
语法: addClass(class|fn)
为每个匹配的元素添加指定的类名, 返回值是jQuery包装对象。
- 添加样式类,参数为字符串情况
$("p").addClass("selected");
// 添加多个样式类
$("p").addClass("selected1 selected2");
- 参数是回调函数
<!-- 给li加上不同的class -->
<ul>
<li>Hello</li>
<li>Hello</li>
<li>Hello</li>
</ul>
<script>
// jQuery 代码:
$('ul li').addClass(function() {
return 'item-' + $(this).index();
});
</script>
<!-- 结果 -->
<!--
<ul>
<li class="item-0">Hello</li>
<li class="item-1">Hello</li>
<li class="item-2">Hello</li>
</ul>
-->
3.3 移除样式类remvoeClass
语法:removeClass([class|fn])
从所有匹配的元素中删除全部或者指定的类。 返回值是jQuery包装对象。
- 参数是字符串样式类
removeClass(str)
// 从匹配的元素中删除 'selected' 类
$("p").removeClass("selected");
// 删除匹配元素的所有类
$("p").removeClass();
- 回调函数的调用
removeClass(func)
func(index, oldClass)
此函数必须返回一个或多个空格分隔的class名。接受两个参数,index参数为对象在这个集合中的索引值,class参数为这个对象原先的class属性值。
// 删除最后一个元素上与前面重复的class
$('li:last').removeClass(function(index, oldClass) {
return $(this).prev().attr('class');
});
3.4 切换样式类 toggleClass
语法 toggleClass(class|fn[,sw])
如果存在(不存在)就删除(添加)一个类。
参数:
- 一个参数:class:CSS类名 String类型
// 如果p标签有selected样式就移除掉,如果没有就添加上。
$("p").toggleClass("selected");
- 两个参数class,switch
1:要切换的CSS类名.
2:用于决定元素是否包含class的布尔值。
var i = 9;
$(this).toggleClass("highlight", i > 3);
- 回调函数
参数:function(index, class)
用来返回在匹配的元素集合中的每个元素上用来切换的样式类名的一个函数。接收元素的索引位置和元素旧的样式类作为参数。
// 根据父元素来设置class属性
$('div.foo').toggleClass(function(index, class) {
if ($(this).parent().is('.bar') {
return 'happy';
} else {
return 'sad';
}
});
3.5 判断样式类是否存在hasClass
语法格式:hasClass(str)
,返回值Boolean类型,返回是否拥有某个样式类。
$('#md').hasClass('box'); // true or false
4. 样式属性操作css
4.1 读取CSS的属性值css(str)
在DOM中我们可以使用DOM对象的style属性来设置或者读取样式的值。jQuery中封装了css()
方法来帮助我们读取或者设置样式值。
<p id="md">hi jQuery</p>
<script>
$('#md').css('color'); // 获取md标签的 color样式值。
</script>
4.2 设置CSS的样式属性值
- 接受两个字符串参数
css(key,val)
将所有段落字体设为红色
$("p").css("color","red");
- 接受键值对的对象作为参数
css(obj)
$("p").css({ "color": "#ff0011", "background": "blue" });
接受两个参数,第一个属性名,第二个回调函数。
css(prop, func)
- prop:属性名.
- func(index,oldValue) 此函数返回要设置的属性值。接受两个参数,index为元素在对象集合中的索引位置,oldValue是原先的属性值。
// div 点击后逐渐增加div的大小
$("div").click(function() {
$(this).css({
width: function(index, value) {
return parseFloat(value) * 1.2;
},
height: function(index, value) {
return parseFloat(value) * 1.2;
}
});
});
下一节预告:
- DOM的节点操作:节点创建、移除、添加、复制、替换等
- DOM的位置属性和大小属性
对应视频地址:https://chuanke.baidu.com/s5508922.html
老马qq: 515154084
老马微信:请扫码

03-老马jQuery教程-DOM操作的更多相关文章
- 04-老马jQuery教程-DOM节点操作及位置和大小
1. jQuery创建DOM标签 1.1 DOM动态创建标签的方法 DOM时代我们通过document的createElement方法动态创建标签.创建标签后,动态的给他添加属性.例如代码: // 动 ...
- js,jQuery和DOM操作的总结(二)
jQuery的基本操作 (1)遍历键值对和数组 , , , , , ]; $.map(arr, function (ele, index) { alert(ele + '===' + index); ...
- 解密jQuery内核 DOM操作
jQuery针对DOM操作的插入的方法有大概10种 append.prepend.before.after.replaceWith appendTo.prependTo.insertBefore.in ...
- jQuery的DOM操作详解
DOM(Document Object Model-文档对象模型):一种与浏览器, 平台, 语言无关的规则, 使用该接口可以轻松地访问页面中所有的标准组件DOM操作的分类 核心-DOM: DOM Co ...
- 第3章 jQuery的DOM操作
一. DOM 分为DOM核心,HTML-DOM和CSS-DOM 1.DOM核心 不专属与javascript. 获取对象:document.getElementsByTagName('div') 获 ...
- jQuery – 3.JQuery的Dom操作
3.1 JQuery的Dom操作 1.使用html()方法读取或者设置元素的innerHTML 2.使用text()方法读取或者设置元素的innerText 3.使用attr() ...
- Jquery所有Dom操作汇总
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 02-老马jQuery教程-jQuery事件处理
1. 绑定简单事件 在DOM中DOM0级绑定事件的方式是直接给事件属性赋值,但是这样有个缺点就是每次指定的事件处理程序会把之前的覆盖掉. jQuery简单绑定事件的方式,可以让我绑定多个事件处理程序跟 ...
- 01-老马jQuery教程-jQuery入口函数及选择器
前言 这套jQuery教程是老马专门为寒门子弟而录制,希望大家看到后能转发给更多的寒门子弟.视频都是免费,请参考课程地址:https://chuanke.baidu.com/s5508922.html ...
随机推荐
- vim学习笔记(一)—— vim安装方法
一.完全卸载vim的方法 sudo apt-get remove --purge vim (--purge 是完全删除,会连配置文件一起删除) 二.Vim前言——————“世界上只有三种编辑器,EMA ...
- MongoDB----逻辑与物理存储结构
基本的操作 一.常用的命令和基础知识 1.进入MongoDB shell 首先我们进入到MongoDB所在目录执行 cd /work/app/mongodb/bin/ #启动 ./mongo 为了方便 ...
- 数字的可视化:python画图之散点图sactter函数详解
最近开始学习python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1.scatter函数原型 2.其中散点的形状参数marker如下: 3.其中颜色参数c如 ...
- python的内置下载器
python有个内置下载器,有时候在内部提供文件下载很好用. 进入提供下载的目录 # ls abc.aaa chpw.py finance.py lsdir.py ping.py u2d-partia ...
- C++栈学习——顺序栈和链栈的差别
C++中栈有顺序栈和链栈之分.在顺序栈中,定义了栈的栈底指针(存储空间首地址base).栈顶指针top以及顺序存储空间的大小stacksize(个人感觉这个数据成员是能够不用定义的) //顺序栈数据结 ...
- 转 kafka 清理数据
由于项目原因,最近经常碰到Kafka消息队列拥堵的情况.碰到这种情况为了不影响在线系统的正常使用,需要大家手动的清理Kafka Log.但是清理Kafka Log又不能单纯的去删除中间环节产生的日志, ...
- Java 技术新手入门
对于想学习Java的朋友 请参考IBM旗下站点:http://www.ibm.com/developerworks/cn/java/newto/index.html 我看了下对于新手有很好的指导,并且 ...
- IOS解惑(1)之@property(nonatomic,getter=isOn) BOOL on;中的getter解惑
1 问题: @property(nonatomic,getter=isOn) BOOL on; 中的getter = isOn的含义? 2 答案: 如果这个property是 BOOL on, 那么O ...
- PCIE 调试过程记录
遇到的问题 PCIE link不稳定 配置空间读写正常,Memory mapping空间读写异常 缘由 之前对PCIE的认识一直停留在概念的阶段,只知道是一个高速通讯协议,主要用于板内.板间的高速BU ...
- FPM打包工具 可以把源码包制定为rpm包 是自动化部署的环节
注意部FPM时的环境一定要跟生产环境的系统版本最好是保持一至,我第一次测试没通过,(我在CENTOS7和部属FPM打好的包在Centos6.x和安装,结果失败) 1:安装 FPM打包工具的依赖包: [ ...