前端基础之BOM和DOM

  JavaScript分为ECMAScript,DOM,BOM

  BOM(Browser Object Model)是指浏览器对象模型,它使JavaScript有能力与浏览器进行‘对话’。

  DOM(Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。

一、window对象

  全局变量是window对象的属性。全局函数是window对象的方法。

  一些常用的window方法:

    window.innerHeight - 浏览器窗口的内部宽度

    window.innerWidth - 浏览器窗口的内部宽度

    window.open() - 打开新窗口

    window.close() - 关闭当前窗口

二、window的子对象

  1、navigator对象

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

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

  2、screen对象

      屏幕对象,不常用。

     一些属性:

    ★screen.availWidth - 可用的屏幕宽度

    ★screen.availHeight - 可用的屏幕高度

  3、history对象

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

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

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

  4、location对象

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

        常用属性和方法:

location.href  // 获取URL
location.href = 'https:www.jd.com' // 跳转到指定页面
location.reload() // 重新加载页面

  5、弹出框

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

     警告框:

alert('who are you?') // 弹出警告框

     确认框:用户点击确认返回true,点击取消返回false。

confirm('who are you?') // 弹出确认框有确定和取消两个按钮

     提示框:用户点击确认返回输入的值,用户点击取消返回值为null。

prompt('请在下方输入你的用户名','guo xu haha') // 弹出提示框能进行输入

  6、计时相关

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

     setTimeout() : 会返回某个值。

// 在指定时间之后执行一次相应函数
var timer = setTimeout(function(){alert(123);},3000) // 这里是毫秒
// 取消setTimeout设置
clearTimeout(timer); // 把setTimeout方法存储在timer变量中,来取消设置

     setinterval() :会不停的调用函数或计算表达式,直到clearInterval()被调用或窗口被关闭。

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

     定时器示例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>定时器</title>
  <script>
    var intervalId;

    function f() {
      var timeStr = (new Date()).toLocaleString();
      var inputEle = document.getElementById("i1");
      inputEle.value = timeStr;
    }

    function start() {
      f();
      if (intervalId === undefined) {
        intervalId = setInterval(f, 1000);
      }
    }
    function end() {
      clearInterval(intervalId);
      intervalId = undefined;
    }

  </script>
</head>
<body>

<input type="text" id="i1">
<input type="button" value="开始" id="start" onclick="start();">
<input type="button" value="结束" id="end" onclick="end();">
</body>
</html>

三、HTML DOM 树

  DOM标准规定HTML文档中的每个成分都是一个节点(node):

    ★ 文档节点(document对象):代表整个文档

    ★ 元素节点(element对象):代表一个元素(标签)

    ★ 文本节点(text对象):代表元素(标签)中的文本

    ★ 属性节点(attribute对象):代表一个属性,元素(标签)才有属性

    ★ 注释是注释节点(comment对象)

  JavaScript可以通过DOM创建动态的HTML:

    ★ JavaScript能够改变页面中的所有HTML元素

    ★ JavaScript能够改变页面中的所有HTML属性

    ★ JavaScript能够改变页面中的所有CSS样式

    ★ JavaScript能够对页面中的所有事件作出反应

四、查找标签

  1、直接查找

document.getElementById('id');             // 根据ID获取一个标签 
document.getElementsByClassName('c1');     // 根据class属性获取(取到的是一个数组)
document.getElementsByTagName('div');      // 根据标签名获取标签集合(取到的是数组) 

  注意:涉及到DOM操作的JS代码应该放在文档的哪个位置。

  2、间接查找

parentElement                     父节点标签元素
// 以下都需要 var Ele = document.getElementById('d1');这一步操作找一个标签在进行操作 children 所有字标签(Ele.children) firstElementChild 第一个字标签元素 lastElementChild 最后一个字标签元素 nextElementSibling 下一个兄弟标签元素 previousElementSibling 上一个兄弟标签元素

五、节点操作

  1、创建节点

var divEle = document.createElement('div'); // 这里是标签名

  2、添加节点

// 创建一个img标签并把这个对象赋值给imgEle
var imgEle = document.createElement('img');
// 设置img标签中的scr属性
imgEle.setAttribute('scr',"http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");

// 从文档中找到ID为‘d1’的标签
var d1Ele = document.getElementById('d1');
// 追加一个子节点(作为最后的子节点)
d1Ele.appendChild(imgEle);

// 把增加的节点放到某个节点的前边。somenode是一个父标签
somenode.insertBefore(newnode,某个节点);

  3、删除节点

     获取要删除的元素,通过父元素调用删除。

     removeChild(要删除的节点);

  4、替换节点

     somenode.replaceChild(newnode,某个节点);

  5、属性节点

     获取文本节点的值:

var divEle = document.getElementById('d1');
divEle.innerText  // 只打印内容不打印标签
divEle.innerHTML  // 带标签的内容

     设置文本节点的值:

var divEle = document.getElementById('d1');
divEle.innerText = '1';
divEle.innerHTML = '<p>2</p>';

     attribute操作:

var divEle = document.getElementById('d1');
divEle.setAttribute('age','18');
divEle.getAttribute('age');
divEle.removeAttribute('age');

// 自带的属性还可以直接,属性名来获取和设置
imgEle.src
imgEle.src = '...'

  6、获取值操作

     elementNode.value

     适用于以下标签:

     ★ input

     ★ select 如果option中的value没有值,则取值的话显示被option标签包裹的内容

     ★ 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);

  7、class的操作

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

  8、指定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

六、事件

  1、常用事件

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

// 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证
onfocus               元素获得焦点
onblur                元素失去焦点

// 应用场景:通常用于表单元素,当元素内容被改变时触发。(select联动)
onchange              域的内容被改变

// 应用场景:当用户在最后一个输入框按下回车按键时,表单提交。
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为形参。

     方式二:

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

    事件示例:

// 搜索框
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>搜索框示例</title>

</head>
<body>
    <input id="d1" type="text" value="请输入关键字" onblur="blur()" onfocus="focus()">
    
<script>
function focus(){
    var inputEle=document.getElementById("d1");
    if (inputEle.value==="请输入关键字"){
        inputEle.value="";
    }
}

function blur(){
    var inputEle=document.getElementById("d1");
    var val=inputEle.value;
    if(!val.trim()){
        inputEle.value="请输入关键字";
    }
}
</script>
</body>
</html>

搜索框示例

    

// select联动
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="x-ua-compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>select联动</title>
</head>
<body>
<select id="province">
  <option>请选择省:</option>
</select>

<select id="city">
  <option>请选择市:</option>
</select>

<script>
  data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};

  var p = document.getElementById("province");
  var c = document.getElementById("city");

  for (var i in data) {
    var optionP = document.createElement("option");
    optionP.innerHTML = i;
    p.appendChild(optionP);
  }
  p.onchange = function () {
    var pro = (this.options[this.selectedIndex]).innerHTML;
    var citys = data[pro];
    // 清空option
    c.innerHTML = "";

    for (var i=0;i<citys.length;i++) {
      var option_city = document.createElement("option");
      option_city.innerHTML = citys[i];
      c.appendChild(option_city);
    }
  }
</script>
</body>
</html>

select联动

 

           

    

 

posted on 2018-09-06 20:31  窮山霧繞(静妙)  阅读(158)  评论(0编辑  收藏  举报

导航