本系列博客汇总在这里:JavaScript 汇总
dom
- 一、bom 简介
- 二、dom 简介
- 三、bom 和 dom 的区别
- 四、dom 获得
-
- 1、根据元素的 id 获得 dom 对象
- 2、根据元素的 name 来获得 dom 对象
- 3、根据元素标签名获得 dom 对象
- 五、innerText 和 innerHTML
-
- 1、innerText 和 innerHtml 的设置
- 2、innerText 和 innerHtml 的获得
- 六、删除和添加行
- 七、替换
- 八、克隆
一、bom 简介
- 浏览器它本身支持一个文档对象。那么,除了文档对象外,还有什么呢?比如说:地址栏,历史记录等。所以为了方便于操作,我们就把浏览器也封装成了一个对象,叫做BOM。
- BOM:Browser Object Model 浏览器对象模型。浏览器本身是一个窗体,所以它有一个 windows 对象,windows 包含如下对象 :
(1)navigator :包含关于 Web 浏览器的信息。
(2)history:包含了用户已浏览的 URL 的信息。
(3)location:包含关于当前 URL 的信息。
(4)document:代表给定浏览器窗口中的 HTML 文档,也就是我们的 DOM 对象。(重点 )
1、DOM:Document Object Model 文档对象模型。该技术的出现,将标记型文档封装成了对象,并将该标记型文档中的所有内容(标签,属性,文本)都封装成了对象。
2、DOM 的好处,目前,我们只能在页面上做一些显示的效果,不能做动态的效果,何谓动态的效果呢?必如说,我们点击一个按钮,做数据的现实和隐藏等。 这些动态效果,都是在操作标签,那么,最简单的操作标签,让它能做一些功能就是怎么做呢?就是把它封装成对象。怎么把它封装成对象呢?那么,这就是 dom 技术的作用,dom 的作用就在于此。这样就可以将对象中封装更多的属性和行为,我们就可以操作这些对象。这样就可以实现静态页面的具备动态的效果。动态效果,就是说让用户可以和我们的页面进行简单的交互,比如说:下拉菜单等。
3、当标记型文档被 DOM 解析器解析后,会按照标签的层次关系,产生一颗 dom 树结构,这个树的每个分支被称为一个节点。我们就是研究如何获取每个节点,并对节点进行操作的。 而浏览器本身具备了 DOM 解析器,所以可以对标记型文本进行 DOM 解析。
1、BOM和浏览器关系密切,DOM和文档有关,这里的文档指的是网页,也就是HTML文档。
2、BOM是Browser Object Model的缩写,即浏览器对象模型。DOM是Document Object Model的缩写,即文档对象模型。
3、BOM没有相关标准。DOM是W3C的标准。
4、BOM的最根本对象是window。DOM最根本对象是document(实际上是window.document)。
二者之间的关系说明如图:
文档对象的加载顺序是从上到下的,所以 js 想要获得 dom 对象,一定要等到文档对象加载完毕再获得。
1、根据元素的 id 获得 dom 对象
通过该标签的 id 属性值来获取该标签节点对象。如果有多个同 id 属性的标签,则返回的是一个节点数组。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function myclick()
{
//根据文档对象的id来获得dom对象
var obj = document.getElementById("username");
alert(obj);
//获得用户名的值
var username = obj.value;
alert(username);
//给input设置值
obj.value = "魏宇轩";
//设置元素的样式
obj.style.background = "skyblue";
//获得password的对象
var obj1 = document.getElementById("password");
alert(obj1.value);
}
</script>
</head>
<body>
用户名:<input id="username" type="text" name="username" value="weiyuxuan"><br>
密码:<input id="password" type="password" name="password" value="123">
<input type="button" value="点击" onclick="myclick()">
</body>
</html>
2、根据元素的 name 来获得 dom 对象
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function myclick()
{
//根据元素的name来获得元素,返回的是数组
var favors = document.getElementsByName("favor");
for(var i = 0; i < favors.length; i++){
//获得数组中的每一个元素
var f = favors[i];
//alert(f.value);
//alert(f.checked);
/* 原生的js中获得多选的的checked属性是true而不是checked
if(f.checked == "checked"){
alert(f.value);
}
*/
if(f.checked){
alert(f.value);
}
}
}
function chkAll()
{
var favors = document.getElementsByName("favor");
for(var i = 0; i < favors.length; i++)
{
//获得数组中的每一个元素
var f = favors[i];
f.checked = true;
}
}
function reverChkAll()
{
var favors = document.getElementsByName("favor");
for(var i = 0; i < favors.length; i++)
{
//获得数组中的每一个元素
var f = favors[i];
if(f.checked){
f.checked = false;
}
else
{
f.checked = true;
}
}
}
</script>
</head>
<body>
爱好:<input type="checkbox" name="favor" value="1">看电影
<input type="checkbox" name="favor" value="2">打台球
<input type="checkbox" name="favor" value="3">处对象
<input type="button" value="点击" onclick="myclick()">
<input type="button" value="全选" onclick="chkAll()">
<input type="button" value="反选" onclick="reverChkAll()">
</body>
</html>
3、根据元素标签名获得 dom 对象
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
function myclick()
{
//根据元素的标签名获得dom对象,返回的是数组
var objs = document.getElementsByTagName("input");
for(var i = 0; i < objs.length; i++)
{
alert(objs[i].value);
}
}
</script>
</head>
<body>
用户名:<input id="username" type="text" name="username" value="renliang"><br>
密码:<input id="password" type="password" name="password" value="123">
<input type="button" value="点击" onclick="myclick()">
</body>
</html>
五、innerText 和 innerHTML
1、innerText 和 innerHtml 的设置
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.myclass
{
border: 1px solid black;
width: 100px;
height: 100px;
}
</style>
<script type="text/javascript">
function myclick()
{
document.getElementById("div1").innerText = "我是div1";
//innerText是指的元素中的 内容,如果有html不会被浏览器解析
document.getElementById("div2").innerText = "<font color='red'>我是div1</font>";
//innerText是指的元素中的 内容,如果有html会被浏览器解析
document.getElementById("div3").innerHTML = "<font color='red'>我是div1</font>";
}
</script>
</head>
<body id="mybody">
<div id="div0">
<div id="div1" class="myclass"></div>
<div id="div2" class="myclass"></div>
<div id="div3" class="myclass"></div>
</div>
<input type="button" value="点击" onclick="myclick()">
</body>
</html>
2、innerText 和 innerHtml 的获得
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.myclass
{
border: 1px solid black;
width: 100px;
height: 100px;
}
</style>
<script type="text/javascript">
function myclick()
{
//innerText获取的时候只能拿到元素内的除了html元素外的文本内容
var t1 = document.getElementById("div2").innerText;
alert(t1);
//获得到元素内的所有内容
var t2 = document.getElementById("div3").innerHTML;
alert(t2);
}
</script>
</head>
<body id="mybody">
<div id="div0">
<div id="div1" class="myclass"></div>
<div id="div2" class="myclass">aaa<font color='red'>我是div1</font></div>
<div id="div3" class="myclass">aaa<font color='red'>我是div2</font></div>
</div>
<input type="button" value="点击" onclick="myclick()">
</body>
</html>
六、删除和添加行
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.mytable
{
width: 300px;
border-collapse: collapse;
}
tr
{
height: 25px;
}
</style>
<script type="text/javascript">
function addrow()
{
//获得表体的dom对象
var tbObj = document.getElementById("tb");
//创建 tr dom对象
var trObj = document.createElement("tr");
//创建td dom对象
var td0 = document.createElement("td");
//创建一个input类型的多选
var ck = document.createElement("input");
//设置属性
ck.setAttribute("type", "checkbox");
//把ck的dom对象追加到td0内部
td0.appendChild(ck);
var td1 = document.createElement("td");
var td2 = document.createElement("td");
var td3 = document.createElement("td");
//把3个td追加到tr里面
trObj.appendChild(td0);
trObj.appendChild(td1);
trObj.appendChild(td2);
trObj.appendChild(td3);
//把tr对象追加到tb里面
tbObj.appendChild(trObj);
}
function deleteRow()
{
//获得表体的dom对象
var tbObj = document.getElementById("tb");
//获得所有的表体的内部的input
var is = tbObj.getElementsByTagName("input");
for(var i = is.length-1; i > 0; i--)
{
//获得被选中的多选
if(is[i].checked)
{
//删除被选中的元素,获得父元素
var trObj = is[i].parentNode.parentNode;
tbObj.removeChild(trObj);
}
}
}
</script>
</head>
<body id="mybody">
<input type="button" value="添加一行" onclick="addrow()">
<input type="button" value="删除" onclick="deleteRow()">
<table border="1" class="mytable">
<thead>
<tr>
<td></td>
<td>姓名</td>
<td>年龄</td>
<td>性别</td>
</tr>
</thead>
<tbody id="tb">
<tr>
<td><input type="checkbox"></td>
<td>魏宇轩</td>
<td>18</td>
<td>男</td>
</tr>
</tbody>
</table>
</body>
</html>
七、替换
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.myclass
{
border: 1px solid black;
width: 100px;
height: 100px;
}
</style>
<script type="text/javascript">
function myclick()
{
var parentDom = document.getElementById("div0");
//获得div3的dom
var div1Dom = document.getElementById("div1");
var div3Dom = document.getElementById("div3");
parentDom.replaceChild(div3Dom, div1Dom);
}
</script>
</head>
<body id="mybody">
<div id="div0">
<div id="div1" class="myclass">div1</div>
<div id="div2" class="myclass">aaa<font color='red'>我是div2</font></div>
<div id="div3" class="myclass">aaa<font color='red'>我是div3</font></div>
</div>
<input type="button" value="替换" onclick="myclick()">
</body>
</html>
八、克隆
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
.myclass
{
border: 1px solid black;
width: 100px;
height: 100px;
}
</style>
<script type="text/javascript">
function myclick()
{
var parentDom = document.getElementById("div0");
//获得div1的dom
var div1Dom = document.getElementById("div1");
//复制一个dom对象
var cn = div1Dom.cloneNode(true);
parentDom.appendChild(cn);
}
</script>
</head>
<body id="mybody">
<div id="div0">
<div id="div1" class="myclass">div1</div>
</div>
<input type="button" value="克隆" onclick="myclick()">
</body>
</html>
如有错误,欢迎指正!