一、BOM和DOM
JavaScript分为 ECMAScript,DOM,BOM。 BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。
DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。 二、window对象
所有浏览器都支持 window 对象。它表示浏览器窗口。 如果文档包含框架(frame 或 iframe 标签),浏览器会为 HTML 文档创建一个 window 对象,并为每个框架创建一个额外的 window 对象。
没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。 所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。全局函数是 window 对象的方法。 HTML DOM 的 document 也是 window 对象的属性之一。 一些常用的Window方法:
window.innerHeight - 浏览器窗口的内部高度
window.innerWidth - 浏览器窗口的内部宽度
window.open() - 打开新窗口
window.close() - 关闭当前窗口 三、window的子对象(BOM)
注意:
Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。
例如:window.document.write()可以简写成:document.write()。 1、location对象(重)
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面 window.location.href 可以写成:location.href // 获取URL
location.href="URL" // 跳转到指定页面
location.reload() // 重新加载页面 2、计时相关(重)
设定一个时间间隔,在一定时间间隔之后再来执行JS代码,就是计时事件
1.setTimeout()
语法:
var t = setTimeout("JS语句",毫秒) 解析:
setTimeout() 方法会返回某个值,这个值是你执行当前setTimeout代码的任务编号(任务id,第几个任务),把这个值储在一个变量中。
当你想取消这个setTimeout()任务时,就可以使用这个变量来指定取消它。 setTimeout() 的第一个参数是含有JavaScript 语句的字符串,如 setTimeout("alert('I Love U')", 3000 ),也可以是函数名,如果是函数名则不需要双引号,如setTimeout(f, 3000 ),
还可以是匿名函数,如 setTimeout(function(){alert('I Love U')}, 3000 ),
第二个参数是指从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒) 例如:
JS语句:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title></title>
<script>
setTimeout("alert('I Love U')", 3000 )
</script>
</head> <body>
<p>请静候三秒</p>
</body>
</html> 函数名:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title></title>
<script>
function f(){
alert('I Love U')
}
setTimeout(f, 3000 )
</script>
</head> <body>
<p>请静候三秒</p>
</body>
</html>

setTimeout



2.clearTimeout()
语法:
clearTimeout(setTimeout_variable) 例子:
// 在指定时间之后执行一次相应函数
var tid = setTimeout(function(){alert('hello world');}, 2000) // 取消setTimeout设置
clearTimeout(tid); 3.setInterval()
setInterval() 方法可按照指定的周期来调用函数或计算表达式。
setInterval() 方法会无限循环调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。 语法:
setInterval("JS语句",时间间隔) 返回值:
一个可以传递给 Window.clearInterval() 从而取消setInterval的周期性执行 4.clearInterval()
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。 语法:
clearInterval(setinterval返回的ID值) 例子:
// 每隔一段时间就执行一次相应函数
var tid = setInterval(function(){console.log('hello world!');}, 2000)
// 取消setInterval设置
clearInterval(tid); 3、navigator对象
浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。 navigator.appName  // Web浏览器全称
navigator.appVersion  // Web浏览器厂商和版本的详细字符串
navigator.userAgent  // 客户端绝大部分信息
navigator.platform   // 浏览器运行所在的操作系统 4、screen对象
屏幕对象,不常用 属性:
screen.availWidth - 可用的屏幕宽度
screen.availHeight - 可用的屏幕高度 5、history对象
window.history 对象包含浏览器的历史。 浏览历史对象,包含了用户对当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。
history.forward() // 前进一页
history.back() // 后退一页 6、弹出框
可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。 1.警告框
警告框经常用于确保用户可以得到某些信息。
当警告框出现后,用户需要点击确定按钮才能继续进行操作。 语法:
alert("警告信息"); 2.确认框
确认框用于使用户可以验证或者接受某些信息。
当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。
如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。 语法:
confirm("你确定吗?") 3.提示框
提示框经常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。 语法:
prompt("请输入","答案") 四、DOM
DOM(Document Object Model)是一套对文档的内容进行抽象和概念化的方法。
当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树 五、HTML DOM 树
图:DOM树 DOM标准规定HTML文档中的每个成分都是一个节点(node):
文档节点(document对象):代表整个文档
元素节点(element 对象):代表一个元素(标签)
文本节点(text对象):代表元素(标签)中的文本
属性节点(attribute对象):代表一个属性,元素(标签)才有属性
注释是注释节点(comment对象)  JavaScript 可以通过DOM创建动态的 HTML:
JavaScript 能够改变页面中的所有 HTML 元素
JavaScript 能够改变页面中的所有 HTML 属性
JavaScript 能够改变页面中的所有 CSS 样式
JavaScript 能够对页面中的所有事件做出反应 六、查找标签
1、直接查找
document.getElementById 根据ID获取一个标签
document.getElementsByClassName 根据class属性获取
document.getElementsByTagName 根据标签名获取标签合集 注意:找ID的时候,ID是唯一的,所以getElement 没有s,而其他的都有s 2、间接查找
parentElement 父节点标签元素
children 所有子标签
firstElementChild 第一个子标签元素
lastElementChild 最后一个子标签元素
nextElementSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素 3、例子
注意:返回数组的那些查找方式,可以通过索引取出具体的某个标签 // 找到ID为d1的节点(元素)
var divEle = document.getElementById('d1'); // ID为d1的节点的父节点
divEle.parentElement; // ID为d1的节点的所有子节点(返回一个包含所有子节点的数组)
dEle.children;
dEle.children[0]; // 取出第一个元素 // ID为d1的节点的第一个子节点
dEle.firstElementChild; // ID为d1的节点的最后一个子节点
dEle.lastElementChild; // ID为d1的节点的下一个兄弟节点
dEle.nextElementSibling; //ID为d1的节点的上一个兄弟节点
dEle.previousElementSibling; 七、节点操作(增删改的节点都是子节点,是要基于父节点进行的)
1、创建节点
语法:
document.createElement("标签名") 示例:
var pEle = document.createElement("p"); 2、添加节点(子节点)
追加一个子节点(作为最后的子节点)
somenode.appendChild(newnode); 把增加的节点放到某个节点的前边。
somenode.insertBefore(newnode,某个节点); 示例1:
//创建节点
var pEle = document.createElement("p"); //先找一个父节点
var dEle = document.getElementById("d"); //把子节点追加到父节点
dEle.appendChild(pEle); 示例2:
//创建节点
var pEle = document.createElement("p"); //先找一个父节点
var dEle = document.getElementById("d"); //父节点里面的某个节点
var d1 = document.getElementById('d1'); //把子节点放到d1这个节点前面
dEle.insertBefore(pEle,d1); 3、删除节点
语法:
获得要删除的元素,通过父元素调用该方法删除
somenode.removeChild(要删除的节点) 示例:
//先找一个父节点
var dEle = document.getElementById("d"); //找到父节点里面想要删除的子节点
var d1 = document.getElementById('d1'); //删除子节点
dEle.removeChild(d1); 4、替换节点
语法:
somenode.replaceChild(newnode, 某个节点); 示例:
//创建节点
var pEle = document.createElement("p"); //先找一个父节点
var dEle = document.getElementById("d"); //父节点里面的某个节点
var d1 = document.getElementById('d1'); //用新建的节点替换d1
dEle.replaceChild(pEle,d1); 5、属性节点
1.获取文本节点的值:
//获取某个节点
var dEle = document.getElementById("d"); //获取某个节点的Text文本内容
dEle.innerText; //获取某个节点的HTML内容
dEle.innerHTML; 注意:Text文本内容是不认识标签的,即不认识div、span等标签的,而HTML是认识标签的。 2.设置文本节点的值:
//获取某个节点
var dEle = document.getElementById("d"); //设置某个节点的Text文本内容
dEle.innerText = "Hello World!"; //设置某个节点的HTML内容
dEle.innerHTML = "<div>Hello World!</div>"; 3.属性(attribute)操作
语法:
为某节点增加一个属性
somenode.setAttribute("属性名","值");
获取这个属性值
somenode.getAttribute("属性名");
删除属性
somenode.removeAttribute("属性名"); 示例:
var dEle = document.getElementById("d");
dEle.setAttribute("name","dd")
dEle.getAttribute("name")
dEle.removeAttribute("name") // 自带的属性还可以直接.属性名来获取和设置
imgEle.src
imgEle.src="..."
6、获取值操作

语法:
elementNode.value 适用于以下标签:
input
select
textarea
示例:
//input的值
var inputEle = document.getElementById("i");
console.log(inputEle.value); //select的值
var sEle = document.getElementById("s");
console.log(sEle.value); //textarea的值
var tEle = document.getElementById("t");
console.log(tEle.value); 7、class的操作
somenode.className 获取所有样式类名(字符串) somenode.classList 获取所有样式类名(数组)
somenode.classList.remove("cls") 删除指定类
somenode.classList.add("cls") 添加类
somenode.classList.contains("cls") 存在返回true,否则返回false
somenode.classList.toggle("cls") 存在就删除(返回false),不存在则添加(返回true) 示例:
HTML代码:
<div class="c1 c2" id="d1"></div> //找到ID为d1这个节点
var divEle = document.getElementById("d1"); //获取这个节点的class样式名
divEle.className; // "c1 c2" //获取这个节点的class样式名
divEle.classList; // ["c1", "c2", value: "c1 c2"] // 删除c2这个样式
divEle.classList.remove("c2"); // 增加c3这个样式
divEle.classList.add("c3"); // 判断c3这个样式是否存在
divEle.classList.contains("c3"); // true //c3存在,所以删除这个样式
divEle.classList.toggle("c3"); 8、指定CSS操作
JS操作CSS属性的规律
1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:
somenode.style.margin
somenode.style.width
somenode.style.left
somenode.style.position 2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。
如:CSS中的margin-top、background-color、z-index、font-family等
somenode.style.marginTop
somenode.style.backgroundColor
somenode.style.zIndex
somenode.style.fontFamily 示例:
var divEle = document.getElementById("d1");
divEle.style.backgroundColor = "red"; 9、注意事项
用document.getElementById找到的标签是唯一的,因为ID是唯一的,所以用ID找到的标签可以直接使用DOM的方法操作,
而用document.getElementsByClassName或者document.getElementsByTagName找到的标签不是唯一的,
因为class类和标签名是可以重复使用的,所以使用的时候要写索引表明是对哪个标签进行操作。
而在jQuery中,类选择器选择到的所有类,可以直接进行操作,即一次性对选择到的类进行操作,如果想要单独对某个类进行操作,
则需要使用筛选器进行筛选

jQuery中


<!--HTML代码 -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <ul>
<li class="c1" style="color: deeppink;">1</li>
<li class="c1">2</li>
<li id="l3" class="c1">3</li>
<li class="c1">4</li>
<li class="c1">5</li>
</ul> </body>
</html>

HTML代码

//使用class改变样式
var liEle = document.getElementsByClassName("c1");
liEle[2].style.color = "red"; //使用ID改变样式
var liEle2 = document.getElementById("l3");
liEle2.style.color = "green";

示例




八、事件
1、常用事件
onclick 当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。(double简写dbl) onfocus 元素获得焦点。 输入框
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。 onload 一张页面或一幅图像完成加载。 onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。 onselect 在文本框中的文本被选中时发生。
onsubmit 确认按钮被点击,使用的对象是form。 2、 绑定方式
方式一:在标签中写属性的方式绑定 <div id="d1" onclick="changeColor(this);">点我改变背景颜色</div>
<script>
function changeColor(ths) {
ths.style.backgroundColor="green";
}
</script> 注意:
this是实参,表示触发事件的当前元素。
函数定义过程中的ths为形参。 方式二:通过JS代码绑定 <div id="d2">点我有惊喜</div>
<script>
var divEle = document.getElementById("d2");
divEle.onclick=function () {
alert("惊不惊喜,刺不刺激!");
}
</script> 3、示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head> <body>
<input type="text" id="i1">
<input type="button" id="start" value="开始">
<button type="button" id="stop" value="停止">停止</button>
<!--<input type="button" id="stop" value="停止">--> <script>
// 把当前时间显示到i1标签中
function setTime() {
// 1. 找到标签
var i1Ele = document.getElementById('i1');
// 2. 拿到当前时间
var now = new Date();
// 3. 设置i1标签的value属性为now时间
i1Ele.setAttribute('value', now.toLocaleString())
}
setTime(); // 定义一个存放计时器id的全局变量
var t;
// 点击开始按钮,让i1标签中的时间动起来
// 1. 找到开始按钮,绑定点击事件
var startBtn = document.getElementById('start');
startBtn.onclick = function () {
// 要做的事儿
if (t === undefined) {
// 一秒钟执行一次设置value的动作
t = setInterval(setTime, 1000);
}
}; // 点击结束按钮,终止设置时间的定时任务
// 1. 找到结束按钮,绑定点击事件
var stopBtn = document.getElementById('stop');
stopBtn.onclick = function () {
// 要做的事儿
// 清除上面的定时器
clearInterval(t);
t = undefined;
} </script>
</body>
</html>

计时器示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>搜索框示例</title>
<script type="text/javascript">
function foo() {
var inputEle = document.getElementById("i1");
inputEle.setAttribute('value', '');
} function foo1() {
var inputEle = document.getElementById("i1");
inputEle.setAttribute('value', '请输入关键字');
}
</script> </head>
<body>
<div>
<!--方式一:在在标签中写属性的方式绑定-->
<input type="text" id="i1" value="请输入关键字" onfocus="foo()" onblur="foo1()">
<input type="button" value="搜索">
</div> <!--方式二:通过JS代码绑定-->
<input type="text" id="i2" value="请输入关键字">
<input type="button" value="搜索"> <script type="text/javascript">
var inputEle2 = document.getElementById('i2');
inputEle2.onfocus = function () {
inputEle2.setAttribute('value','');
}
inputEle2.onblur = function () {
this.setAttribute('value','请输入关键字');
} </script> </body>
</html>

搜索框示例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <select id="s1">
<option>请选择省</option> </select> <select id="s2"> </select> <script>
var data = {"广东省": ["广州市", "深圳市", "惠州"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
var s1Ele = document.getElementById('s1');
var s2Ele = document.getElementById('s2');
// 页面一刷新把所有的省加载到第一个select标签中
for (var i in data) {
console.log(i); // 创建一个option标签
var op = document.createElement('option'); // 设置文本
op.innerText = i; // 把创建好的标签追加到第一个select标签内部
s1Ele.appendChild(op);
}
// 给第一个select标签绑定一个值发生变化的事件
s1Ele.onchange = function () {
// 0. 获取当前select选中的值
var value = s1Ele.value; // 1. 去data里找到对应的地区信息
var data2 = data[value]; // 2. 清空第二个select标签的option选项
s2Ele.innerText = ''; // 3. 把对应的地区信息追加到第二个select标签内部
for (var j=0;j<data2.length;j++) {
// 创建一个option标签
var op = document.createElement('option'); // 设置文本
op.innerText = data2[j]; // 把创建好的标签添加到第二个select标签内部
s2Ele.appendChild(op);
}
}
</script>
</body>
</html>

select联动示例


前端基础之BOM和DOM和三个小示例(计时器、搜索框、select联动)的更多相关文章

  1. JS BOM DOM对象 select联动 计时器 时间 css操作 节点(标签 ) 查找标签 {前端基础之BOM和DOM}

    前端基础之BOM和DOM 前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我 ...

  2. 前端基础之BOM和DOM day52

    前端基础之BOM和DOM   前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互 ...

  3. day 47 前端基础之BOM和DOM

      前端基础之BOM和DOM   前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些 ...

  4. day35前端基础之BOM和DOM

    day35前端基础之BOM和DOM BOM操作 简介 BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行"对话". ...

  5. 前端基础之BOM和DOM

    关于网页交互:BOM和DOM javaScript分为ECMAScript,DOM,BOM . BOM(Browser  object  Model)是指浏览器对象模型,它使JavaScript有能力 ...

  6. 前端基础之BOM和DOM(响应式布局、计时器、搜索框、select联动)

    一.BOM和DOM JavaScript分为 ECMAScript,DOM,BOM. BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进 ...

  7. Python学习(二十二)—— 前端基础之BOM和DOM

    转载自http://www.cnblogs.com/liwenzhou/p/8011504.html 一.前言 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没 ...

  8. 前端基础 之 BOM和DOM

    浏览目录 背景 BOM window对象 window的子对象 DOM HTML DOM树 查找标签 节点操作 事件 一.背景 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些 ...

  9. 前端基础之BOM和DOM操作

    目录 BOM和DOM定义 windows对象 windows的子对象 navigator对象 screen对象 history对象 location对象 弹出框 警告框 确认框 提示框 计时相关 se ...

随机推荐

  1. phoenix 入门

    http://phoenix.apache.org/Phoenix-in-15-minutes-or-less.html Blah, blah, blah - I just want to get s ...

  2. Linux下清空缓冲区的方法

    Linux下清空缓冲区的方法 C标准规定fflush()函数是用来刷新输出(stdout)缓存的.对于输入(stdin),它是没有定义的.但是有些编译器也定义了fflush( stdin )的实现,比 ...

  3. 网桥bridge

    1. 网桥基础 什么是网桥 网桥将多个网络在数据链路层连接起来.网桥的前身是集线器或中继器.网桥和集线器的区别:集线器上各端口都是共享同一条背板总线的,网桥的两个端口分别有一条独立的交换信道,不是共享 ...

  4. 轻量级分布式 RPC 框架(转)

    RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样. RPC 可基于 HTTP 或 TCP 协议,Web Servi ...

  5. 关于javascript遍历对象

    1:遍历对象属性var obj={a:'aa',b:'bb'} for(var i in obj) { alert(i); //输出 a b } var obj={'a':'aa','b':'bb'} ...

  6. NodeJS与Javascript时代

    如果你一直在关注互联网的相关技术,你应该会有这样一种感觉,web技术正在发生着变革,虽然我们不愿相信,但一个事实已经越来越清晰的摆在了眼前:LAMP组合的时代将要成为历史,在web诞生的二十年间,它影 ...

  7. [android] android 获取网络连接信息

    效果图:  工具类 /** * 获取网络连接信息 * * 根据NetworkInfo可以知道有很多的连接方式和信息 * * ① 当没有任何可用网络的时候,networkinfo为null 判断netw ...

  8. jquery widgets grid 重置列配置

    $("#jqxGridByAttendanceDetail").on("bindingcomplete", function (event) { // your ...

  9. nib文件的默认搜索规则

    if you do not specify a nib name, and do not override the loadView method in your custom subclass, t ...

  10. zoj 3370(二分+二分图染色)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3912 思路:二分覆盖直径,然后判断是否有冲突(即距离小于等于直径的不 ...