Java学习——JavaWeb基础(四)(JavaScript的BOM、DOM、事件)

一、BOM

BOM:Browser Object Model 浏览器对象模型

概念:将浏览器的各个组成部分封装为对象,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的、可以与浏览器窗口
进行互动的对象结构。

特点:BOM对象不能自己创建,当文档加载进内存,浏览器自动创建。
组成:
		Window():窗口对象
		Location():地址栏对象
	    History():历史记录(当前窗口)对象
		Navigator :浏览器对象   基本不用仅作了解
		Screen:显示器屏幕        基本不用仅作了解	
				availHeight	获取系统屏幕的工作区域高度,排除 Microsoft Windows 任务栏。 	
				availWidth	获取系统屏幕的工作区域宽度,排除 Windows 任务栏。 	
				height		获取屏幕的垂直分辨率。 
				width		获取屏幕的水平分辨率。 
	
1.1 Window对象(窗口对象)

Window 对象表示浏览器中打开的窗口。是BOM的顶层对象,其他对象都是该对象的子对象。
使用方式:

window.方法名;//window可以省略
方法名;

方法:

1.1.1 与弹出有关的方法
alert() 显示带有一段消息和一个确认按钮的警告框。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。 
prompt() 显示可提示用户输入的对话框。 
<script type="text/javascript">
	window.alert("警告弹框"); 
	window.confirm("你确定关闭吗?");
	window.prompt("请输入地址","");
</script>
1.1.2 与定时器有关的方法
setInterval() 按照指定的周期(以毫秒计)来调用函数或计算表达式。循环执行
clearInterval() 取消由 setInterval() 设置的 timeout。 
setTimeout() 在指定的毫秒数后调用函数或计算表达式。 只执行一次
clearTimeout() 取消由 setTimeout() 方法设置的 timeout。 
		<script type="text/javascript">
			var bom = function() {
				alert("爆炸");
			}
			//调用一次的定时器  返回值就是你的定时器的id
			var bomid=window.setTimeout(bom, 2000);
			var boom = function() {
				document.write("爆炸");
				//需要在控制台,打印数据调试
				console.log("循环的定时器")
			}
			//调用多次的定时器 
			var boomid=window.setInterval(boom,2000);
			//取消定时器
			window.clearInterval();
			window.clearTimeout();
		</script>

使用定时器实现一个页面的时钟

	<body>
		<h1 id="time"></h1>
	</body>
	<script type="text/javascript">
		//返回对象的引用。
		var timemethod=function(){
			var obj	=document.getElementById("time");
			var str=new Date().toLocaleString();
			obj.innerText=str;
		}
		//先调用一次该方法
		timemethod();
		//设置改变值 调用定时器方法方法
		window.setInterval(timemethod,1000);
	</script>
1.1.3 与打开关闭有关的方法
open():打开新窗口 
	参数:打开目标的URL。返回值:返回新打开窗口的window引用
close():关闭窗口
	谁调用,关闭谁
	<body>
		<button type="button" id="btn">关闭按钮</button>
	</body>
	<script type="text/javascript">
		var newWindow=window.open("http://www.baidu.com");
		var button=document.getElementById("btn");
		button.onclick=function(){
			newWindow.close()
		}
	</script>
1.1.4 获取其他对象的属性
history :对 History 对象的只读引用。请参数 History 对象。 
location :用于窗口或框架的 Location 对象。请参阅 Location 对象。 
Navigator 对 Navigator 对象的只读引用。请参数 Navigator 对象。 
 Screen 对 Screen 对象的只读引用。请参数 Screen 对象。 
 document:对 Document 对象的只读引用。请参阅 Document 对象。 
1.2 Location:地址栏对象

获取方式:可以用window对象中的属性获取(window.location;)
属性:href:设置或获取当前的URL

port 设置或返回当前 URL 的端口号。 
href:设置或获取当前的URL
hostname 设置或返回当前 URL 的主机名。 
protocol 设置或返回当前 URL 的协议。 

当我们需要在浏览器输入中文时,会出现编码的问题,导致中文不能正常的显示。

1.2.1 浏览器的编码解码问题

decodeURIComponent() URI 解码
encodeURIComponent() URI 编码

		<script type="text/javascript">
			var text="中文的编码解码问题"
			document.write(text)
			document.write("<br>")
			//编码
			var encodetext=encodeURIComponent(text);
			document.write(encodetext)
			document.write("<br>")
			var decodetext=decodeURIComponent(encodetext);
			document.write(decodetext)
			document.write("<br>")
			var url=location.href;
			document.write(url)
			document.write("<br>")
			var decodeurl=decodeURIComponent(url)
			document.write(decodeurl)
		</script>
1.3 History:历史记录对象

History 对象包含用户(在浏览器窗口中)访问过的 URL。
History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问。
属性:length:返回浏览器历史列表中的URL数量
注意:length表示的是当前窗口历史列表的URL数量
对象方法:

back() 加载 history 列表中的前一个 URL。 
forward() 加载 history 列表中的下一个 URL。 
go() 加载 history 列表中的某个具体页面。 

在页面创建一个后退和前进按钮

<script type="text/javascript">
function goBack()
  {
  window.history.back()
  }
  function goForward()
  {
  window.history.forward()
  }
</script>
<body>
<input type="button" value="Back" onclick="goBack()" />
<input type="button" value="Forward" onclick="goForward()" />
</body>

go方法中的参数传递负数,则是后退页面,传递正数为前进页面。前进和后退的页面个数由传递的数值决定

二、DOM对象

DOM:Document Object Model 文档对象模型,将标记语言文档的各个组成部分 封装为对象
组成:

		* Document:文档对象
		* Element:元素对象
		* Attribute:属性对象
		* Text:文本对象
		* Comment:注释对象
		* Node:节点对象
2.1 Document:文档对象

获取:window.document

//document 中 body属性 可以获取body标签对象
document.body.bgColor = "red";
//title 属性获取文档标题
var bt = document.title;
//获取文档最后一次修改时间
var rq=document.lastModified;

方法:
write()方法:向文档写 HTML 表达式 或 JavaScript 代码。

2.1.1 获取对象的方法
getElementById():通过id属性值获取唯一的元素
getElementsByTagName():通过标签名称获取元素对象数组
getElementsByName():通过name属性值获取元素对象数组
getElementsByClassName():通过class属性值获取元素对象数组
	<body>
		<h1 id="myh">aaaaa</h1>
				<div class="mydiv">
					bbbbbbb
				</div>
				<div class="mydiv">
					bbbbbbb
				</div>
				<div class="mydiv">
					bbbbbbb
				</div>
				<div class="mydiv">
					bbbbbbb
				</div>
				<ul>
					<li>asfasdfasdfasd</li>
					<li>asfasdfasdfasd</li>
					<li>asfasdfasdfasd</li>
					<li>asfasdfasdfasd</li>
					<li>asfasdfasdfasd</li>
				</ul>
				<form action="" method="post">
					<input type="text" name="username" value="" />
					<input type="password" name="password" value="" />
					<input type="checkbox" name="hobby" id="" value="aa" />
					<input type="checkbox" name="hobby" id="" value="bb" />
					<input type="checkbox" name="hobby" id="" value="ccc" />
					<input type="checkbox" name="hobby" id="" value="dd" />
					<input type="submit" value=""/>
				</form>
	</body>
	<script type="text/javascript">
		//1.根据标签的id获取标签对象
		var id=document.getElementById("myh");
		//2.根据标签的类名获取多个标签对象
		var divclass=document.getElementsByClassName("mydiv");
		//遍历集合中的标签
		for (var i = 0; i < divclass.length; i++) {
			//alert(divclass[i]);
		}
		//3.根据标签名获取多个标签对象
		var lititle=document.getElementsByTagName("li");
		for (var i = 0; i < lititle.length; i++) {
			//alert(lititle[i])
		}
		//针对input标签,根据input里面的name属性值,获取多个标签
		//返回一个数组
		var yonghuming=document.getElementsByName("username");
		var mima=document.getElementsByName("password");
		var hobbys=document.getElementsByName("hobby");
		//数组使用foreach循环
		hobbys.forEach(function(ele){
			//alert(ele)
		})
		for (var i = 0; i < hobbys.length; i++) {
			//alert(hobbys[i])
		}
		</script>
2.1.2 创建对象的方法
createElement:创建元素对象
createAttribute:创建属性对象
createComment:创建注释对象
createTextNode:创建文本对象
	<script type="text/javascript">
		//通过id获取标签对象
		/* var body=document.getElementById("bd")
		alert(body) */
		//获取body
		var bd = document.body;
		//alert(bd)
		//创建一个标签对象
		var divs = document.createElement("div")
		//创建文本对象
		var text = document.createTextNode("文本信息");
		//给父标签添加子标签
		divs.appendChild(text);
		var att = document.createAttribute("style");
		att.value = "color:red;font-size:70px";
		//给标签设置属性 传入属性名和他对应的值
		divs.setAttribute("align", "center");
		//给标签设置属性对象 需要传入属性对象
		divs.setAttributeNode(att);
		//创建注释对象
		var zhushi = document.createComment("注释");
		bd.appendChild(zhushi)
		document.body.appendChild(divs);
		//bd.remove(); 删除自身,连同里面的子元素一块删了
		//bd.removeChild(div); //移除子元素
		//根据属性名来移除标签上的属性
		//div.removeAttribute("align");
		//移除属性对象。你传入的是一个属性对象
		//div.removeAttributeNode(attr);
	</script>
2.2 Element:元素对象

创建/获取:通过document来获取和创建。

2.2.1 元素对象的方法
removeAttribute():删除属性
 setAttribute():设置属性
<body>
    <a>一个标签</a>
    <button id="btn_set">设置属性</button>
    <button id="btn_removee">删除属性</button>
</body>
<script>
    //获取a标签
    var a=document.getElementsByTagName("a")[0];
    var btn_set = document.getElementById("btn_set");
    var btn_removee = document.getElementById("btn_removee");
    btn_set.onclick=function () {
        var a=document.getElementsByTagName("a")[0];
        //设置属性
        a.setAttribute("href","https://www.baidu.com")
    }
    btn_removee.onclick=function () {
        var a=document.getElementsByTagName("a")[0];
        //删除属性
        a.removeAttribute("href")
    }
</script>
2.3 Node:节点对象

节点可以是元素节点、属性节点、文本节点等等。所有dom对象都可以被认为是一个节点
**注意:**文本节点不存在子节点。

2.3.1 节点对象的方法

常用方法:

appendChild():向节点的子节点列表的结尾添加新的子节点。
removeChild()	:删除(并返回)当前节点的指定子节点。
replaceChild():用新节点替换一个子节点。

属性:parentNode 返回节点的父节点。

    <style>
        div{
            border: 1px black solid;
        }
        #div1{
            width: 200px;
            height: 200px;
        }
        #div2{
            width: 100px;
            height: 100px;
        }
        #div3{
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
<div id="div1">
    <div id="div2">div1</div>
</div>
<a id="del" href="javascript:void(0)">删除div1的子节点</a>
<a id="add" href="javascript:void(0)">添加div1的子节点</a>
</body>
<script>
    //获取a标签
    var del = document.getElementById("del");
    del.onclick = function () {
        //获取div1
        var div1 = document.getElementById("div1");
        var div2 = document.getElementById("div2");
        div1.removeChild(div2);
    }
    var add = document.getElementById("add");
    add.onclick = function () {
        //添加
        var div1 = document.getElementById("div1");
        var div3= document.createElement("div");
        div3.setAttribute("id","div3");
        div1.appendChild(div3)
    }
    var div2 = document.getElementById("div2");
    var div = div2.parentNode;
    alert(div)
</script>
2.4 元素对象的属性(innerHTML和innerTEXT)

获取:
innerText :获取或设置标签之间的文本内容,不关你有没有嵌套只操作文本
innerHTML :获取或设置标签之间的内容,如果获取的标签有子标签,把子标签也当成文本获取出来
设置:
innerText :设置的文本内容,全部作为文本嵌入
innerHTML :设置的文本内容,如果存在标签,会识别标签

	<body>
		<h1 id="myh1">abc</h1>
		<h2 id="myh2">
			<span>aaaaaa</span>
		</h2>
		<h3 id="myh3"></h3>
		<h3 id="myh4"></h3>
	</body>
	<script type="text/javascript">
		var h1=document.getElementById("myh1");
		//标签之间没有嵌套字标签,二者相同
		var text1=h1.innerText;
		var html1=h1.innerHTML;
		//设置h1的文本
		h1.innerText="abcd"
		//追加设置
		h1.innerText+="abcde"
		var h2=document.getElementById("myh2");
		var text2=h2.innerText;
		alert(text2);//aaaaaa
		var html2=h2.innerHTML;
		alert(html2)//<span>aaaaaa</span>
		//设置
		var h3=document.getElementById("myh3");
		//给标签内部设置文本内容,如果有子标签,也看做文本
		h3.innerText="<span>abc</span>"
		var h4=document.getElementById("myh4");
		h4.innerHTML="<span>abc</span>"
	</script>
2.5 控制元素的样式

1.使用style属性来设置
对于元素的属性里面存在-时,将-后面的第一个字母大写。比如:font-size–> fontSize
2.提前定义好类选择器的样式,通过元素的className属性来设置对应的class属性值

    <style>
        .class1 {
            width: 100px;
            height: 100px;
            background-color: purple;
        }
    </style>
</head>
<body>
    <div id="div1">
        第一个div中的内容
    </div>
    <div id="div2">
        div2的内容
    </div>
</body>
<script>
    //第一种
    var div1 = document.getElementById("div1");
    div1.style.width="200px";
    div1.style.fontSize="50px";
    div1.style.color="pink"
    var div2 = document.getElementById("div2");
    //第二种
    div2.onclick=function () {
        div2.className='class1'
    }
</script>

三、事件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值