本文共 4323 字,大约阅读时间需要 14 分钟。
BOM: browser object model 浏览器对象模型。允许JS和浏览器“对话”。
window object窗口对象,代表浏览器窗口。 所有浏览器都支持窗口对象。JS中的全局对象,函数,变量都是窗口对象的成员。具体来说,全局变量是窗口对象的属性;全局函数是窗口对象的方法;即便是文档对象,也是窗口对象的一个属性,下面二者是相等的:window.document.getElementById("header");document.getElementById("header");
alert() 显示带有一段消息和一个确认按钮的警告框。
confirm() 显示带有一段消息以及确认按钮和取消按钮的对话框。返回true/false prompt() 显示可提示用户输入的对话框。 例如: var ret = prompt(“please enter a num”) //接收用户输入并赋值给retopen() 打开一个新的浏览器窗口或查找一个已命名的窗口。
close() 关闭浏览器窗口。 setInterval() 按照指定的周期(以毫秒计 1000=1s)来调用函数或计算表达式。 clearInterval() 取消由 setInterval() 设置的 timeout,需要传入setInterval()的返回值。 setTimeout() 在指定的毫秒数后调用函数或计算表达式。 clearTimeout() 取消由 setTimeout() 方法设置的 timeout。 scrollTo() 把内容滚动到指定的坐标。 window对象是全局的,以上方法不需要加window前缀就可以直接调用。 下面我们看一下setInterval()和clearInterval()的具体应用://显示效果是通过对value赋值实现的 //onclick触发start()函数执行 //onclick触发stop()函数执行
document object model 文档对象模型。
浏览器为加载的HTML创建一个文档对象模型,所有的对象/元素按树形结构组织起来。
HTML中的每一个成分都是一个节点:
整个文档是一个document节点; 每个元素/标签是一个element节点; 每个属性是一个attribute节点; 每个元素中的文本是一个text节点。 这里,我们关注document节点和element节点。这里通过节点树展示节点间的关系:
var ele = document.getElementByTagName("input")[0]
var ele = document.createElement("input"); //创建节点 ele.setAttribute("type","text"); //为节点增加属性
注意,添加节点需要通过父节点来操作,所以要查找父节点
var parEle = document.getElementsById("par"); //查找父节点 parEle.appendChild(ele); //通过父节点添加创建的子节点(添加到最后) // 或者把创建的节点添加到某个节点的前面 parEle.insertBefore(ele,someNode);
删除节点需要通过父节点来操作:
parEle.removeChild(ele);
需要通过父节点来操作:
parEle.replaceChild(new, old);
ele.getAttribute("attr_name"); ele.setAttribute("attr_name","value"); ele.removeAttribute("attr_name");
获取文本节点的值:innerText, innerHTML
赋值:innerText
:纯文本 ele.innerText = "<p>hello</p>"
只能赋值为纯文本p标签会被当作文本对待。 innerHTML
:超文本。通过它可以给节点添加HTML代码。 ele.innerHTML = "<p>hello</p>"
,赋值超文本,添加了p标签和文本hello 对于表单类节点,比如<input>, <select>,<textarea>
等,选择了节点后,通过点.value
可以获取用户的输入值。
ele.className; //获取节点的所有class名称ele.classList.add("class_name"); //为节点添加classele.classList.remove("class_name"); //为节点删除class
ele.style.property=value
ele.style.color="yellow";//等价于ele.setAttribute("attr_name","value");
<input>, <select>, and<a>
;与onfocus相反的是onblur;<select>, radiobutton, checkbox
;说明:
1. 所有事件的监听是由操作系统完成的,然后把相关信息封装到event对象。event对象保存事件触发状态信息。 2. e=e||window.event; //通过e或全局的window.event对象拿,为了作浏览器兼容 3. e.keyCode //获取按键的asc码 4. String.fromCharCode(num) ==>数字转化为对应asc字符父元素绑定的事件,会传播给子元素。即子元素如果也绑定了事件,那么子元素的事件执行后,还会执行父元素的事件。
解决方案:在子元素中阻止触发父元素事件将事件直接绑定在HTML代码元素的属性中,造成代码耦合,可读性差。
在JS代码中查找节点,然后对节点绑定事件。推荐这种方式,降低代码耦合,灵活性更高。
在DOM事件处理中,当一个函数用作事件处理时,this就是触发事件的元素。
在行内事件处理中,this就是DOM元素var eles.document.getElementsByClassName("titile"); //假如我们选择了一组节点eles.onclick = function(){ //点击其中一个节点,对触发事件的结点应用CSS this.style.color="green"; //this指点击(触发事件)时的元素。}