微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

前端javascript之BOM、DOM操作、事件

目录

BOM与DOM操作

  • BOM 浏览器对象模型>>>:使用js操作浏览器
  • DOM 文档对象模型>>>:使用js操作前端页面

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的子对象

浏览器对象,通过这个对象可以判定用户所使用的浏览器,包含了浏览器相关信息。

navigator.appName  // Web浏览器全称
navigator.appVersion  // Web浏览器厂商和版本的详细字符串
navigator.userAgent  // 客户端绝大部分信息
navigator.platform   // 浏览器运行所在的操作系统

screen对象(了解即可)

屏幕对象,不常用。

一些属性

  • screen.availWidth - 可用的屏幕宽度
  • screen.availHeight - 可用的屏幕高度

history对象(了解即可)

window.history 对象包含浏览器的历史。

浏览历史对象,包含了用户当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面

history.forward()  // 前进一页
history.back()  // 后退一页

location对象

window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面

常用属性方法

location.href  获取URL
location.href="URL" // 跳转指定页面
location.reload() 重新加载页面

弹出框

可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

警告框

警告框经常用于确保用户可以得到某些信息。

当警告框出现后,用户需要点击确定按钮才能继续进行操作。

语法:

alert("你看到了吗?");

确认框(了解即可)

确认框用于使用户可以验证或者接受某些信息。

当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。

如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。

语法:

confirm("你确定吗?")

提示框(了解即可)

提示框经常用于提示用户在进入页面前输入某个值。

提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。

如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。

语法:

prompt("请在下方输入","你的答案")

计时相关

通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数调用后立即执行。我们称之为计时事件。

setTimeout()

语法:

var t=setTimeout("JS语句",毫秒)

setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。

setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。这个语句可能诸如 "alert('5 seconds!')",或者对函数调用,诸如 alertMsg()"。

第二个参数指示从当前起多少毫秒后执行一个参数(1000 毫秒等于一秒)。

clearTimeout()

语法:

clearTimeout(setTimeout_variable)

举个例子

// 在指定时间之后执行一次相应函数
var timer = setTimeout(function(){alert(123);}, 3000)
// 取消setTimeout设置
clearTimeout(timer);

setInterval()

setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。

setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

语法:

setInterval("JS语句",时间间隔)

返回值

一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。

clearInterval()

clearInterval() 方法可取消由 setInterval() 设置的 timeout。

clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

语法:

clearInterval(setinterval返回的ID值)

举个例子:

// 每隔一段时间就执行一次相应函数
var timer = setInterval(function(){console.log(123);}, 3000)
// 取消setInterval设置
clearInterval(timer);

BOM操作总结

window.open() 				- 打开新窗口
window.close() 				- 关闭当前窗口
history.forward()  			// 前进一页
history.back()  			// 后退一页
location.href  				获取URL
location.href="URL" 		// 跳转指定页面
location.reload() 			重新加载页面


setTimeout()                 //一定时间间隔之后来执行代码
clearTimeout()               //清除setTimeout
setInterval()			    //周期(以毫秒计)来调用函数或计算表达式。
clearInterval()			    //清除setInterval

DOM操作之查找标签

前缀关键字>>>:document
    
# 基本查找(核心)
document.getElementById           根据ID获取一个标签
document.getElementsByClassName   根据class属性获取
document.getElementsByTagName     根据标签获取标签合集

"""
如果我们的js代码需要页面上某个标签加载完毕
那么该js代码应该写在body内部最下方或者引入外部js文件
"""

# 间接查找(重要)
parentElement            父节点标签元素
children                 所有子标签
firstElementChild        第一个标签元素
lastElementChild         最后一个标签元素
nextElementSibling       下一个兄弟标签元素
prevIoUsElementSibling   上一个兄弟标签元素

image

image

节点操作

var aEle = document.createElement('a');  # 创建标签
aEle.setAttribute('href','https://www.mmzztt.com/')  # 设置属性
aEle.innerText = '好不好看?'  # 设置内容文本
document.getElementsByTagName('p')[0].appendChild(aEle)  # 动态添加
"""一定要明确当前手上是什么对象"""


imgEle.getAttribute('title')  # 获取标签属性
imgEle.getAttribute('src')
'https://img0.baidu.com/it/u=249914639,459556566&fm=253&fmt=auto&app=138&f=JPEG?w=501&h=500'

innerText
	不加赋值符号是获取内部文本
    加了赋值符号是设置内置文本
    # 不可以识别HTML标签
innerHTML
	不加赋值符号是获取内部标签+文本
    加了赋值符号是设置内置标签+文本
    # 可以识别HTML标签

image

image

获取值操作

语法:

获取标签对象.value

适用于以下标签

  • input
  • select
  • textarea
var iEle = document.getElementById("i1");
console.log(iEle.value);
var sEle = document.getElementById("s1");
console.log(sEle.value);
var tEle = document.getElementById("t1");
console.log(tEle.value);
# 普通的文本数据获取
	标签对象.value
# 特殊的文件数据获取
	标签对象.value  '''仅仅获取一个文件地址而已'''
    标签对象.files[0]  '''获取单个文件数据'''
    标签对象.files  '''获取所有文件数据'''

image

class的操作

classname  获取所有样式类名(字符串)
classList  查看所有的类(列表)
classList.remove(cls)  删除指定类
classList.add(cls)  添加类classList.contains(cls)  存在返回true,否则返回false
classList.toggle(cls)  存在就删除,否则添加

image

指定CSS操作

obj.style.backgroundColor="red"

JS操作CSS属性的规律:

1.对于没有中横线的CSS属性一般直接使用style.属性名即可。如:

obj.style.margin
obj.style.width
obj.style.left
obj.style.position

2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可。如:

obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily

事件

HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。

常用事件

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               // 练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)

onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。
onload         一张页面或一幅图像完成加载。
onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouSEOut     鼠标从某元素移开。
onmouSEOver    鼠标移到某元素之上。

onselect      在文本框中的文本被选中时发生。
onsubmit      确认按钮被点击,使用的对象是form。

绑定方式:

方式一(基本不用):

<div id="d1" onclick="changeColor(this);">点我</div>
<script>
  function changeColor(ths) {
    ths.style.backgroundColor="green";
  }
</script>

注意:

this是实参,表示触发事件的当前元素。

函数定义过程中的ths为形参。

方式二(常用):

<div id="d2">点我</div>
<script>
  var divele2 = document.getElementById("d2");
  divele2.onclick=function () {
    this.innerText="呵呵";
  }
</script>

内置参数this

# this指代的就是当前被操作对象本身
在事件的函数代码内部使用
	btnEle.onclick = function () {
            alert(456)
            console.log(this)
        }

事件案例

案例1:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>牛逼啊</title>

</head>
<body>
<!--案例1-->
<p>username:
    <input type="text" id="d2">
    <button id="d1">出来</button>
    <button id="d3">结束</button>
</p>
<p>password:
    <input type="text" id="pwd">
</p>
<script>
    var butEle1 = document.getElementById('d1')
    var butEle2 = document.getElementById('d3')
    var t = null
    function getTime() {
        var time = new Date().toLocaleString()
        // 获取input标签对象
        var inpEle = document.getElementById('d2')
        inpEle.value = time
    }
    // 获取用户动作的信息
    butEle1.onclick = function () {
        if (t == null) {
            t = setInterval(getTime, 1000)
        }
    }
    butEle2.onclick = function () {
        clearInterval(t)
        t = null
    }
</script>
</body>
</html>

image

案例2:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>牛逼啊</title>
</head>
<body>
//案例2
<p id="d4">username:
    <input type="text" id="d1">
</p>
<p id="d5">password:
    <input type="text" id="d2">
</p>
<button id="d3">登陆</button>
<script>
    var btnEle = document.getElementById('d3')
    btnEle.onclick=function (){
        var userEle = document.getElementById('d1').value
        var pwdEle = document.getElementById('d2').value
        if(userEle !== 'jason' && pwdEle !== '123'){
            // 创建span标签
            var spanEle1 = document.createElement('span')
            //添加文本
            spanEle1.innerText = '用户名已重复.'
            spanEle1.style.color = 'red'
            var pEle1 = document.getElementById('d4')
            //追加到p标签内
            pEle1.append(spanEle1)
            var spanEle2 = document.createElement('span')
            //添加文本
            spanEle2.innerText = '密码错误.'
            spanEle2.style.color = 'red'
            var pEle2 = document.getElementById('d5')
            pEle2.append(spanEle2)
        }
    }
</script>
</body>
</html>

image

案例3:

聚焦事件(元素对象.onfocus)

失焦事件(元素对象.onblur)

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>牛逼啊</title>

</head>
<body>
<p id="d4">username:
    <input type="text" id="d1">
</p>
<p id="d5">password:
    <input type="text" id="d2">
</p>
<button id="d3">登陆</button>
<script>
    var inp1Ele = document.getElementById('d1')
    inp1Ele.onfocus=function (){
        this.style.backgroundColor = 'red'
    }
    inp1Ele.onblur=function (){
        alert('我离开了input框')
    }
</script>
</body>
</html>

image

案例4:

文本域变化事件(元素对象.onchange)

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>牛逼啊</title>
</head>
<body>
<p id="d4">username:
    <input type="text" id="d1">
</p>
<p id="d5">password:
    <input type="text" id="d2">
</p>
<button id="d3">登陆</button>
<script>
    var inpEle = document.getElementById('d1')
    inpEle.onchange=function (){
        console.log(this.value)
    }
</script>
</body>
</html>

image

案例4:

文本域变化事件(元素对象.onchange)

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>牛逼啊</title>
</head>
<body>
<p>省:
    <select name="" id="d1">
    </select>
</p>
<p>市:
    <select name="" id="d2">
        
    </select>
</p>
<script>
    var data = {"河北": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
    var sel1Ele = document.getElementById('d1')
    var sel2Ele = document.getElementById('d2')
    for (let i in data){
        var opt1Ele = document.createElement('option')

        opt1Ele.innerText = i
        opt1Ele.value = i
        sel1Ele.appendChild(opt1Ele)
    }
    sel1Ele.onchange=function (){
        //1.先获取opt1里的信息
        //2.根据信息获得对应字典里的值
        //3.添加值
        var valuList = data[this.value]
        //先清理之前的文本
        sel2Ele.innerHTML = ''
        for (let i=0;i<valuList.length;i++){
            var opt2Ele = document.createElement('option')
            opt2Ele.innerText = valuList[i]
            opt2Ele.value = valuList[i]
            sel2Ele.append(opt2Ele)
        }
    }
</script>
</body>
</html>

image

138

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐