1、DOM概述
DOM简介,以及BOM对window对象初步操作,相应的代码如下
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<script type="text/javascript" src="out.js">script>
<script type="text/javascript">
//演示navigator对象:包含关于 Web 浏览器的信息。
function windowObjDemo()
{
var name = window.navigator.appName;//注意APPName是属性而不是方法
var version = navigator.appVersion;//这里window对象可以省略,因为一旦窗体存在,window对象也就存在
println(name+"-----"+version);
//Netscape-----5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36
}
//windowObjDemo();
//演示location:包含关于当前 URL 的信息。
function windowObjDemo2()
{
//var pro = location.protocol;
//var URLtext = location.href;
//println(pro+"---"+URLtext);
//给location的href属性设置一个值。改变了地址栏的值,并对其值进行了解析如果是http,还进行连接访问。
location.href = "http://www.sina.com.cn";//会跳转到相应的网址。
}
//windowObjDemo2();
//file:---file:///G:/JS%E6%BC%94%E7%A4%BA/dom_demo.html——我们最开始访问的是一个文件
script>
<form>
<input type="button" value="演示window中的对象" onclick="windowObjDemo2()" />
form>
body>
html>
2、window浏览器对象的常见方法
浏览器操作对象是window对象,使用的是BOM技术,它的常见方法及代码实例如下:
----------------------------------window_method.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<script type="text/javascript" src="out.js">script>
<script type="text/javascript">
var timeid;//定义一个全局变量,这样windowMethodDemo与stopTime方法都可以用到
function windowMethodDemo()
{
//confirm方法:显示一个确认对话框,其中包含一个可选的消息和确定取消按钮。返回值是Boolean
//var b = window.confirm("确定要点击吗?");//同样,在由于页面创建就有window存在,因此window对象可以省略
//println("b:"+b);
//出现按钮“确定要点击吗?”,确定则打印true,取消则打印false
//setTimeout:经过指定毫秒值后计算一个表达式。
//window.setTimeout("alert('time out run')",4000);
//经过4秒后弹出窗体“time out run”
//setInterval:每经过指定毫秒值后计算一个表达式。
//注意,这样带返回值也会执行setInterval,同时会将其返回值赋予timeid,效果与不将返回值赋予某个变量的情形是一样的
timeid = window.setInterval("alert('interval run')",4000);
//每经过4秒弹出窗体“interval run”
}
function stopTime()
{
//clearInterval:使用 setInterval 方法取消先前开始的间隔事件。
//既将setInterval设置的连续事件停止下来,参数是setInterval的返回值。
window.clearInterval(timeid);
//在按下停止按钮之前,每隔4秒就会弹出一个窗口,按下停止后窗口不再弹出
}
//窗口移动
function windowMove()
{//IE浏览器才有效果,而Chrome浏览器没有效果
//window.moveBy(10,10);//窗口分别向右边和下面移动10
//moveTo(80,40);//窗口移动到横坐标80纵坐标40的位置
for(var x=0; x<1000 ;x++)
{
moveBy(20,0);
moveBy(0,20);
moveBy(-20,0);
moveBy(0,-20);
//结果窗口疯狂移动
}
}
function windowOpen()
{
//open 打开新窗口并装入给定 URL 的文档。
/*
oNewWindow = window.open( [sURL] [, sName] [, sFeatures] [, bReplace])
其中sURL代表地址符、sName表示以什么方式打开窗口、sFeatures表示设置打开窗口的属性
*/
open("ad.html","_blank","height=400,width=400,status=no,toolbar=no,menubar=no,location=no");
//打开一个新的设置好的窗体
}
script>
<form>
<input type="button" value="演示window对象的方法" onclick="windowOpen()" />
<input type="button" value="停止" onclick="stopTime()" />
form>
body>
html>
---------------------
ad.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<h1>特价大优惠!h1>
<h2>什么东西便宜了呢!!h2>
<h1>你猜!h1>
<script type="text/javascript">
//这里不设置JS函数,而是直接使用window对象,调用window对象的延时以及关闭方法,那么新窗口打开后会直接读取到JS代码,执行延时与关闭函数(JS代码中,function函数部分需要调用执行,而函数外的部分会直接读取执行)
//close 关闭当前浏览器窗口或 HTML 应用程序(HTA)。
setTimeout("close()",3000);//设置3秒后本小窗口关闭,只有新开的窗口我们才可以设置自动关闭。
script>
body>
html>
3、window浏览器对象的常见事件
window相关事件以及属性的示例如下
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<script type="text/javascript">
/*
window对象常见的事件:
onunload 在对象卸载前立即触发。
onload 在浏览器完成对象的装载后立即触发。
onbeforeunload 在页面将要被卸载前触发。
*/
//onunload事件本身窗体已经具备,现在我们想要定义的是窗体事件的处理方式,因此我们需要将事件指向一个函数
//这样我们在函数中就可以定义事件的行为,事件被触发函数就运行。(我们用JS的匿名函数来处理事件,事件名就是指向相应函数的变量)
/*
onunload = function()
{
alert("onunload run");
}
onload = function()
{
alert("onload run");
}
onbeforeunload = function()
{
alert("onbeforeunload run");
}
*/
/*
当我们访问一个页面,当页面的数据全都在浏览器窗口加载完毕后,window对象装载完毕,onload触发
当我们加载在浏览器窗口的事件不要的时候(既关闭窗口的时候),关闭之前onbeforeunload事件触发
浏览器关闭的时候onunload事件触发
*/
/*
我们发现上述事件只有onload在各类浏览器中都支持,而其他2个方法不管是在ie11还是Chrome中都不支持
好像是最新的Chrome和ie11支持onunload和onbeforeunload,但是不支持alert,反正知道就可以。
*/
//下面演示一下window对象的属性
//status 设置或获取位于窗口底部状态栏的信息。
onload = function()
{
window.status = "页面加载完毕";//发现底部状态栏的信息被设置为"页面加载完毕"
document.write(window.status);//页面打印"页面加载完毕"
}
script>
body>
html>
4、window浏览器对象的小练习
相应代码如下:
windowtest.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<script type="text/javascript">
/*
* 演示弹窗广告效果。
*
* 页面一加载完就执行:onload事件
* 在当前页面定义脚本,可以在onload事件中完成广告的弹窗。
* onload事件一加载,就打开广告弹窗页面:open方法
方法2:也可以直接写open,页面一读到就开始执行
*/
window.onload = function()
{
//注意,表示路径的时候斜杆“/”只需要一个,而反斜杠“\”则需要2个
open("G:\\JS演示\\ad.html","_blank","height=400,width=400,status=no,toolbar=no,menubar=no,location=no");
}
script>
body>
html>
--------------------------------------
ad.html
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<h1>特价大优惠!h1>
<h2>什么东西便宜了呢!!h2>
<h1>你猜!h1>
<script type="text/javascript">
//close方法 关闭当前浏览器窗口或 HTML 应用程序(HTA)。
// setTimeout("close()",3000);//设置3秒后本小窗口关闭
//我们弹出弹窗后,用户关闭弹窗,为了使得用户再次看到弹窗,我们用onunload设置用户关闭当前的弹窗页面后,
//再次打开弹窗“ad.html”,而再次关闭“ad.html”,就会再次弹出“ad.html”,这样就会一直循环!
//注意,我们open会使用一个新的浏览器界面弹出,我们关闭的是浏览器,而不是浏览器界面,因此,我们用的是onunload(关闭浏览器),而不是onbeforeload (关闭当前页面)
//onunload = function()
//{
// open("G:\\JS演示\\ad.html","_blank","height=400,width=400,status=no,toolbar=no,menubar=no,location=no");
//}
//如果我们将弹窗页面缩小,这样就一直看不到,我们可以设置隔一段事件就使得页面显示在界面上
//既setInterval与focus方法,focus既将当前的窗口前置
//focus 使得元素得到焦点并执行由 onfocus 事件指定的代码。
setInterval("focus()",1000);//发现就算将窗口缩小,每隔1秒就会前置1次!
script>
body>
html>
5、window对象下的document对象
document对象:代表给定浏览器窗口中的 HTML 文档。
document相应描述与代码示例如下,这一部分主要讲的是获取节点
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<script type="text/javascript">
//定义获取节点的函数
function getNodeDemo()
{
/*
* 需求:获取页面中的div节点。
* 思路:通过docment对象完成。因为div节点有id属性。所以可以通过id属性来完成获取。(id是唯一的)
*/
var divnode = document.getElementById("divid");//通过id获取div标签的节点
//节点都有三个必备的属性。节点名称,节点类型,节点值。
//想要知道标签都有哪些属性,需要到文档中相应的标签下面寻找
//document.write(divnode.nodeName+"---"+divnode.nodeType+"---"+divnode.nodeValue);
//结果:DIV---1---null,nodeName是标签的属性名,nodeType使用数字来标识不同的标签节点,“1”表示节点为标签类型
/*
* 常见节点有三种:
* 1,标签型节点: 类型 1
* 2,属性节点: 类型 2
* 3,文本节点: 类型 3
*
* 标签型节点是没有值的,属性和文本节点是可以有值的。
*/
//获取div节点中的文本。——通过innerHTML属性
//var text = divnode.innerHTML;
//document.write(text);//结果:这是一个div标签
//改变div中的文本。
divnode.innerHTML = "哈哈内容被我修改了".fontcolor("red");
//结果:点击按钮,发现文本从“这是一个div标签”变成红色的“哈哈内容被我修改了”
}
//获取文本框节点演示getElementsByName方法
function getNodeDemo2()
{
//var nodes = document.getElementsByName("user");//由于name属性可以重复,最后获得是一个数组
//document.write(nodes[0].value);//结果:获取值hahaha,当然也可以自己在文本框内输入值
//当然我们也可以直接获取节点数组的某一个节点
var userNode = document.getElementsByName("user")[0];
document.write(userNode.value);//结果:获取值hahaha
}
//获取超链接节点对象。演示getElementsByTagName方法。
function getNodeDemo3()
{
var nodes = document.getElementsByTagName("a");//该方法同样返回数组
//alert(nodes[0].innerHTML);
//document.write(nodes.length);
for(var x=0; x<nodes.length; x++)
{
//alert(nodes[x].innerHTML);
//使得所有超链接点开的界面在新窗口打开。之前是必须在每一个超链接标签中设置target(或者在head中通过CSS设定)
nodes[x].target = "_blank";//注意得点击按钮才会从新窗口打开
}
}
/*
* 对于页面中的超链接,新闻链接通过新窗口打开,门户网站链接在当前页面打开。
* 当然是要获取其中被操作的超链接对象啊。
* 可是通过document获取超链接,拿到的是页面中所有的超链接节点,只想获取一部分该如何办呢?
* 只要获取到被操作的超链接所属的节点即可。再通过这个节点获取到它里面所有的超链接节点。
*
*/
//这里,我们将相同的超链接封装到同一个div标签中
function getNodeDemo4()
{
//获取超链接所属的div节点
var divNode = document.getElementById("newslink");
//通过对div对象方法的查找发现它也具备getElementsByTagName方法。
//记住:所有的容器型标签都具备这个方法。在该标签范围内获取指定名称的标签。
var aNodes = divNode.getElementsByTagName("a");
for(var x=0; x<aNodes.length; x++)
{
alert(aNodes[x].innerHTML);
aNodes[x].target = "_blank";
}
}
script>
<input type="button" value="演示document对象获取节点" onclick="getNodeDemo4()" />
<div id="divid">这是一个div标签div>
<input type="text" name="user" value="hahaha"/><br/>
<a href="http://www.sina.com.cn">新浪网站11a>
<a href="http://www.SOHU.com.cn">搜狐网站22a>
<div id="newslink">
<a href="http://www.163.com.cn">新闻链接1a>
<a href="http://www.164.com.cn">新闻链接2a>
<a href="http://www.itcast.com.cn">新闻链接3a>
div>
body>
html>
上面讲述了3个获取节点的方式,下面我们通过节点的层次关系获取节点对象。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
head>
<body>
<script type="text/javascript">
function getNodeByLevel()
{
//获取页面中的表格节点。
var tabNode = document.getElementById("tabid");
//获取表格的父节点。parentNode——这是一个属性
//var parNode = tabNode.parentNode;
//alert(parNode.nodeName);//Body——表格的父节点是body
//获取子节点。childNodes——这是一个集合
var nodes = tabNode.childNodes;//这里获得是子节点是子节点的集合
alert(nodes[0].childNodes[0].childNodes[0].nodeName);
//打印nodes.nodeName结果是undefined,因为子节点是一个集合而不是一个对象。
//打印nodes[0].nodeName结果是tbody(我们的浏览器其实是#text,将tr移动到table标签后就是tbody,这里见35-33-15-14.35文本节点的解析),获得tbody的集合
//打印nodes[0].childNodes[0].nodeName,打印tr
//获取兄弟节点。
//上一个。
//var node = tabNode.previousSibling.previousSibling;
//alert(node.nodeName);
//下一个
//var node = tabNode.nextSibling.nextSibling;
//alert(node.nodeName);//span
/*
只有一个previousSibling或者nextSibling的时候,结果会解析处空白文本#text
尽量少用兄弟节点,因为在解析的时候会出现浏览器不同解析不一致,会解析出标签间的空白文本节点。(其实我们在Chrome浏览器中parentNode与childNodes节点也会有这种情况发生)
*/
}
script>
<input type="button" value="通过节点层次关系获取节点" onclick="getNodeByLevel()"/>
<div>div区域div>
<span>span区域span>
<table id="tabid"><tr><td>单元格一td>
<td>单元格二td>
tr>
table>
<span>span区域11span>
<dl>
<dt>上层项目dt>
<dd>下层项目dd>
dl>
<a href=''>一个超链接a>
body>
html>
6、节点的操作(通过document获取节点后操作节点)
节点操作的相应示例代码如下
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档title>
<style type="text/css">
div
{
border:#00ccff 1px solid;
width:200px;
padding:30px;
margin:10px;
}
/*
这里使用id选择器定义具体的div的格式
*/
#div_1{
background-color:#00ccff;
}
#div_2{
background-color:#FFccff;
}
#div_3{
background-color:#cc00ff;
}
#div_4{
background-color:#00FF00;
}
style>
head>
<body>
<script type="text/javascript">
//创建并添加节点。
//需求:在div_1节点中添加一个文本节点。
function crtAndAdd()
{
/*
* 1,创建一个文本节点。
* 2,获取div_1节点。
* 3,将文本节点添加到div_1节点中。
*/
//1、创建文本节点。
//createTextNode() 从指定值中创建文本字符串。 返回值:Returns the created TextNode object.
var oTextNode = document.createTextNode("这是一个新的文本");
//2、获取div_1节点。
var oDivNode = document.getElementById("div_1");
//3、将文本节点添加到div_1节点中。
//使用div的appendChild()方法: 给对象追加一个子元素。
oDivNode.appendChild(oTextNode);
}
//需求:在div_1中创建并添加一个按钮节点。
function crtAndAdd2()
{
//1、创建一个按钮节点。——使用input标签
//createElement 为指定标签创建一个元素的实例。 返回值:Returns a reference to the new element.
var oButNode = document.createElement("input");
//通过相应标签的引用以及属性添加该标签的属性值
oButNode.type = "Button";
oButNode.value = "一个新按钮";
//2,获取div_1节点。
var oDivNode = document.getElementById("div_1");
//3,将按钮节点添加到div_1节点中。
oDivNode.appendChild(oButNode);
}
//通过另一种方式完成添加节点。
function crtAndAdd3()
{
/*
* 其实是使用了容器型标签中的一个属性:innerHTML,这个属性可以设置html文本。
*我们通过这个属性添加相应的HTML标签
*/
//1,获取div_1节点。
var oDivNode = document.getElementById("div_1");
//通过innerHTML属性添加相应标签
//oDivNode.innerHTML = "";//注意这里的格式
oDivNode.innerHTML = "有个超链接";//注意,这个设置会将前面的设置覆盖
}
script>
<script type="text/javascript">
//需求将div_2节点删除。
function delNode()
{
//1,获取div_2节点。
var oDivNode = document.getElementById("div_2");
//2,使用div节点的remvoeNode方法删除。
//oDivNode.removeNode(true);//注意将参数设置为true,这样div的子节点(这里是文字)也会删除,否则不会删除
//一般使用removeChild方法。 删除子节点。
//通过parentNode属性获取div_2的父节点,然后在用父节点的removeChild,将div_2删除。
oDivNode.parentNode.removeChild(oDivNode);//参数是要删除的子节点oDivNode,因为此父节点的子节点可能有多个,必须指定删除哪一个子节点
}
//需求:用div_3节点替换div_1节点。
function updateNode()
{
/*
* 获取div-3和div-1.
* 使用replaceNode进行替换。
*/
var oDivNode_1 = document.getElementById("div_1");
var oDivNode_3 = document.getElementById("div_3");
//oReplace = object.replaceNode(oNewNode):用于替换的对象作为参数
//oDivNode_1.replaceNode(oDivNode_3);
// 建议使用replaceChild方法。——同样是要获取要替换的对象的父对象再利用父对象来删除
//oReplace = object.replaceChild(oNewNode, oChildNode)
oDivNode_1.parentNode.replaceChild(oDivNode_3,oDivNode_1)
}
//需求:希望用div_3替换div-1,并保留div-3节点。
//其实就是先对div_3进行克隆
function cloneDemo()
{
var oDivNode_1 = document.getElementById("div_1");
var oDivNode_3 = document.getElementById("div_3");
//克隆div_3
//cloneNode 从文档层次中复制对对象的引用。oClone = object.cloneNode( [bCloneChildren])
oCopyNode_3 = oDivNode_3.cloneNode(true);//带true会将div_3的子节点也替换过去
//克隆后不会多显示一个div_3区域,但是div_3对象已经被克隆
//oDivNode_1.replaceNode(oCopyNode_3);//发现使用oCopyNode_3替换oDivNode_1,原来3也还存在
// 建议使用replaceChild方法。
oDivNode_1.parentNode.replaceChild(oCopyNode_3,oDivNode_1);
}
script>
<input type="button" value="创建并添加节点" onclick="crtAndAdd3()"/>
<input type="button" value="删除节点" onclick="delNode()"/>
<input type="button" value="修改节点" onclick="updateNode()"/>
<input type="button" value="克隆节点" onclick="cloneDemo()"/>
<div id="div_1">
div>
<div id="div_2">
好好学习,day day up!
div>
<div id="div_3">
div区域演示文字
div>
<div id="div_4">
节点的增删改查
div>
body>
html>