一、修改
和DOM相同,可修改元素的 内容、属性、样式 ,仍然注意凡是和修改有关的函数,都一个函数两用。
1.修改内容
(1)元素开始标签到结束标签之间的原始的HTML内容
//DOM
元素.innerHTML
//jQuery
$元素.html("新内容")
//无“新内容”时表示获取元素的内容,有则表示将原内容修改为新内容(一函数两用)
(2)元素开始标签到结束标签之间的纯文本内容
//DOM
元素.textContent
//jQuery
$元素.text("新内容")
(3)表单元素的值
//DOM
元素.value
//jQuery
$元素.val("新值")
举例:使用元素内容实现表单验证;
<body>
<h1>操作元素的内容和值</h1>
<form action="">
用户名:<input name="uname">
<span></span><br>
密码:<input type="password" name="upwd">
<span></span><br>
<input type="submit" value="提交注册信息">
</form>
<script src="js/jquery-1.11.3.js"></script>
<script>
//正确时,使用图片:"<img src='img/ok.png'>"
//姓名错误时: "<img src='img/err.png'>用户名必须介于3~9位之间!"
//密码错误时: "<img src='img/err.png'>密码必须介于6~8位之间!"
//DOM 4步
// 验证用户名
//1. 查找触发事件的元素
// 触发事件的元素是文本框,文本框失去焦点时进行验证
$(":text")
//2. 绑定事件处理函数
.blur(function () {
var $this = $(this);
//3. 查找要修改的元素
//查找当前文本框旁边的span元素
var $span = $this.next();
//4. 修改元素
// 4.1获得当前文本框的内容
var value = $this.val();
// 4.2进行验证
if (value.length >= 3 && value.length <= 9) {
// 4.3修改span的内容
$span.html(`<img src='img/ok.png'>`);
} else {
$span.html(`<img src='img/err.png'>用户名必须介于3~9位之间!`);
}
})
// 验证密码
// 1.查找触发事件的元素
// 触发事件的为密码框
$(":password")
// 2.绑定事件处理函数
.blur(function () {
var $this = $(this);
// 3.查找需要修改的元素
// 当前密码框跟前的span元素
var $span = $this.next();
// 4.修改元素
// 4.1先获取密码框的内容
var value = $this.val();
// 4.2进行验证
if (value.length >= 6 && value.length <= 8) {
$span.html(`<img src='img/ok.png'>`);
} else {
$span.html(`<img src='img/err.png'>密码必须介于6~8位之间!`);
}
})
</script>
</body>
2.修改属性
(1)字符串类型的HTML标准属性
//DOM/
//旧核心DOM/
元素.getAttribute("属性名")
元素.setAttribute("属性名","新值")
//新HTML DOM
元素.属性名=新值
//jQuery
$元素.attr("属性名","新值")
$元素.prop("属性名","新值")
举例:点击图片切换下一张;
<body>
<h1>操作元素的属性</h1>
<img src="img/1.jpg" alt="1">
<script src="js/jquery-1.11.3.js"></script>
<script>
//DOM 4步
// 1. 查找触发事件的元素
// 查找img
$("img")
// 2. 绑定事件处理函数
.click(function () {
// 3. 查找要修改的元素
// 修改img本身
var $this = $(this);
// 4. 修改元素
// 4.1取出当前img元素中alt属性值转为整数
var alt = parseInt(
$this.attr("alt")
);
// 4.2如果属性值<4,就++;否则变回1
if (alt < 4) {
alt++;
} else {
alt = 1;
}
// 4.3.3将新的alt值拼成图片路径,放入当前img的src属性中
$this.attr({
src: `img/${alt}.jpg`,
alt: alt
});
})
</script>
</body>
(2)bool类型的HTML标准属性
//DOM
//HTML DOM
元素.属性名
//jQuery
$元素.prop("属性名",新bool值)
(3)自定义扩展属性
//DOM
//旧核心DOM:
元素.getAttribute()
元素.setAttribute()
//HTML5:
元素.dataset.属性名
//jQuery
$元素.attr()
举例:点小图片,切换大图片;
<body>
<img src="img/1.jpg" data-click data-target="img/1-l.jpg" class="my-small">
<img src="img/2.jpg" data-click data-target="img/2-l.jpg" class="my-small">
<img src="img/3.jpg" data-click data-target="img/3-l.jpg" class="my-small">
<img src="img/4.jpg" data-click data-target="img/4-l.jpg" class="my-small">
<hr />
<img src="img/1-l.jpg" class="my-big">
<script src="js/jquery-1.11.3.js"></script>
<script>
//点击小图片,下方my-big中显示大图片
//DOM 4步
// 1. 查找触发事件的元素
// 查找所有带有data-click属性的img元素
$("[data-click]")
// 2. 绑定事件处理函数
.click(function () {
// 3. 查找要修改的元素
// 修改下方大图
var $big = $(".my-big");
// 4. 修改元素
// 4.1获得当前点击的img的data-click属性值保存的大图片路径
var src = $(this).attr("data-target");
// 4.2将大图路径设置给大图的src属性
$big.attr("src", src);
})
</script>
</body>
3.修改样式
//DOM
//修改内联样式
元素.style.css属性="新值"
//获取完整样式
getComputedStyle(元素)
//jQuery
//获取css属性值、修改css属性值
$元素.css("css属性","新值")
//如果.css()中没有给新值,则.css()底层自动执行getComputedStyle()操作,获取属性值
//如果.css()中给了新值,则.css()底层自动执行.style.css属性,执行修改操作
批量修改一个元素的多个css属性:
//DOM
元素.className="class名" //只能整体替换所有class,不便于修改其中某一个class
//jQuery
$元素.addClass("className") //添加一个class
$元素.removeClass("className") //去除一个class
$元素.hasClass("className") //判断是否有某个calss
$元素.toggleClass("className") //在有或没有一个class之间来回切换
举例:实现双态按钮;
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
.btn {
padding: 5px 10px;
border-radius: 3px;
border: 1px solid #aaa;
outline: none;
}
.up {
background: #fff;
color: #333;
}
.down {
background: #ddd;
color: #fff;
}
</style>
</head>
<body>
<button class="btn up">双态按钮</button>
<script src="js/jquery-1.11.3.js"></script>
<script>
//双态按钮: 让按钮的class在up和down之间切换
//DOM 4步
//1. 查找触发事件的元素
$(".btn")
//2. 绑定事件处理函数
.click(function () {
//3. 查找要修改的元素
var $this = $(this);
if ($this.hasClass("down")) {
$this.removeClass("down")
} else {
$this.addClass("down")
}
//$(this).toggleClass("down") //等价于if else
//4. 修改元素
})
</script>
</body>
二、按节点间关系查找
1.DOM 两种关系,六个属性
(1)父子关系
元素.parentElement //父元素
元素.children //所有直接子元素
元素.firstElementChild //第一个直接子元素
元素.lastElementChild //最后一个直接子元素
(2)兄弟关系
元素.previousElementSibling //前一个兄弟元素
元素.nextElementSibling //后一个兄弟元素
2.jQuery两种关系,八个属性
(1)父子关系
$元素.parent() //父元素
$元素.children() //所有直接子元素
$元素.children("选择器") //只选择符合要求的个别直接子元素
$元素.find("选择器") //选择所有后代中符合要求的元素
$元素.children(":first-child") //第一个直接子元素
$元素.children(":last-child") //最后一个直接子元素
(2)兄弟关系
$元素.prev() //前一个兄弟
$元素.prevAll("选择器") //之前所有兄弟:
$元素.next() //后一个兄弟
$元素.nextAll("选择器") //之后所有兄弟
$元素.siblings("选择器") //除当前元素之外,其余所有兄弟元素
案例:标签页效果;
<head>
<meta charset="UTF-8">
<style>
.tabs {
list-style: none;
padding: 0
}
.tabs a {
text-decoration: none;
color: #000;
padding: 6px 12px;
display: inline-block;
}
.tabs>li {
float: left;
border-bottom: 1px solid #000;
}
.tabs>.active {
border: 1px solid #000;
border-bottom: 0;
}
</style>
</head>
<body>
<h1>使用属性选择器实现标签页头的切换</h1>
<ul class="tabs">
<li class="active">
<a data-toggle="tab" href="#">十元套餐</a>
</li>
<li>
<a data-toggle="tab" href="#">二十元套餐</a>
</li>
<li>
<a data-toggle="tab" href="#">三十元套餐</a>
</li>
</ul>
<script src="js/jquery-1.11.3.js"></script>
<script>
//DOM 4步
//1. 查找触发事件的元素
// 查找带有data-toggle属性,且属性值为tab的所有标签按钮
$("[data-toggle=tab]")
//2. 绑定事件处理函数
.click(function () {
//3. 查找要修改的元素
//需要修改的是 a标签的父级元素以及父级的兄弟元素
//4. 修改元素
var $this = $(this);
// 4.1先为父级元素添加.active属性
$this.parent().addClass("active");
// 4.2在为父级元素的其他兄弟元素取消.active属性
$this.parent().siblings().removeClass("active");
//4.1和4.2可以合二为一(链式)
//$this.parent().addClass("active").siblings().removeClass("active");
})
</script>
</body>
效果如图,每点击一个套餐,就会切换到当前套餐下。