保安日记:JavaScript学习第七篇之DOM基础

API和WebAPI

API是给程序员提供的一种工具,以便能更轻松的实现想要完成的功能。
Web API是浏览器提供的一套操作浏览器功能和页面元素的API(BOM和DOM)。

DOM

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或者XML)的标准编程接口。
W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式。

DOM树
在这里插入图片描述
DOM在开发中主要用来操作元素

获取元素方法
  1. 根据ID获取
var element = document.getElementById('id');
注意:
1. id是大小写敏感的字符串,要写引号
2.返回一个匹配到 ID 的 DOM Element 对象
  1. 根据标签名获取
    <ul>
      <li></li>
      <li></li>
      <li></li>
    </ul>

elements = element.getElementsByTagName('tagName');
var lis = document.getElementsByTagName('li');  //document指的整个文档
//可以获取父元素内部所有指定标签名的子元素
var a = document.getElementsByTagName('ul') //会报错 不能以伪数组的形式作为父元素
console.log(a[0].getElementsByTagName('li'))

//也可以先给父元素指定一个ID
<ul id=b>
      <li></li>
      <li></li>
      <li></li>
    </ul>
var b = document.getElementsById('ul');
console.log(b.getElementsByTagName('li'));
注意:
1.返回的是  获取过来元素对象的集合 以伪数组的形式存储
2.可以通过遍历的方式访问里面的元素
3.得到的元素对象是动态的  元素变化伪数组里的内容也随之变化
4.父元素必须是单个对象(必须指明是哪个对象),获取元素时不包括父元素自己
  1. H5新增的方法获取
//根据类名返回元素对象集合
document.getElementsByClassName( '类名');
//根据指定选择器返回第一个元素对象 
document.querySelector ('选择器');
//根据指定选择器返回所有元素对象集合 
document.querySelectorAll ('选择器');
注意:  
1.选择器要加符号 类 .box   ID #box
  1. 获取特殊元素(body,HTML)
//获取body
var doc = document.body;
//获取HTML
var htm = document.documentElement;

事件基础

JavaScript使我们有能力创建动态页面,而事件是可以被JavaScript侦测到的行为。简单理解∶触发—响应机制。
网页中的每个元素都可以产生某些可以触发JavaScript的事件,例如,我们可以在用户点击某按钮时产生一个事件,然后去执行某些操作。

事件由三部分组成 :

  1. 事件源: 事件被触发的对象 比如按钮
  2. 事件类型:如何触发, 比如鼠标点击
  3. 事件处理程序: 通过函数赋值的方式完成

执行事件的步骤:

 <body>
    <div>123</div>

    <script>
      //1.获取事件源
      var div = document.querySelector("div");
      //   2.注册事件(绑定事件)
      //   3.添加事件处理程序(采取函数赋值形式)
      div.onclick = function () {
        console.log("hello,world");
      };
    </script>
  </body>

操作元素

修改元素内容

element.innerText = '';  //可以直接是文字内容 也可以是函数
element.innerText = count();
element.innerHTML = '';
element.innerHTML = count();
两者区别:
innerText :
1.不识别html标签  比如div.innerText = 'hello <br> world' 不能识别出来
2.属性可以读写,可以获取元素里的内容,可以去除空格和换行
innerHTML :
1.识别html标签  W3C标准
2.属性可以读写,可以获取元素里的内容,保留空格和换行
	<button id = 'ldh'>刘德华</button>
	<button id = 'zxy'>张学友</button>
	<img src="/123" alt="">
<script>
	//修改元素属性src
	// 1.获取元素
	var ldh = document.getElementById( 'ldh');
	var zxy = document.getElementById( 'zxy');
	var img = document.queryselector( 'img');
	// 2.注册事件处理程序
	zxy.onclick = function() {
		img.src = images/zxy.jpg';
		img.title'张学友思密达';
	}
	ldh. onclick = function() {
		img.src= 'images/ldh.jpg';
		img.title ='刘德华';
	}
< / script>

修改表单属性

<body>
    <button>按钮</button><br />
    <input type="text" value="输入内容" />

    <script>
      //   1.获取元素
      var btn = document.querySelector("button");
      var input = document.querySelector("input");
      //   2.注册事件 处理程序
      btn.onclick = function () {
        //   表单里面的值 文字内容是通过value来修改的 普通盒子才用innerHTML
        input.value = "被点击";
        // 如果想要某个表单被禁用  不能再点击就用 disabled
        this.disabled = true;
        // this 指向的是事件函数的调用者  btn
      };
    </script>
  </body>

修改样式属性

element.style        //行内样式操作
element.className  	 //类名样式操作
注意:
1.js里面的样式采取驼峰命名法 比如 fontSize、backgroundColor
2.js修改 style样式操作,产生的是行内样式  权重比较高
3.如果样式修改比较多,可以采取操作类名方式更改元素样式
4.class是保留字  因此使用className来操作元素类名属性
5.className会直接更改元素的类名,会覆盖原先的类名,如果想保留原先的类名
this.className = '类名1 类名2'; 采用多类名选择器

排他思想
如果有同一组元素,我们想要某一个元素实现某种样式,需要用到循环的排他思想算法∶

  1. 所有元素全部清除样式(干掉其他人)
  2. 给当前元素设置样式(留下我自己)
  3. 注意顺序不能颠倒,首先干掉其他人,再设置自己

// 1.获取所有按钮元素
 <body>
       <button></button>;
       <button></button>;
       <button></button>;
       <button></button>;

 <script>
		var btns = document.getElementsByTagName( ' button ' );
		//btns得到的是伪数组里面的每一个元素 btns[i]
		for (var i = 0; i < btns.length; i++) {
			btns[i].onclick = function({
			//(1)我们先把所有的按钮背景颜色去掉―干掉所有人
				for (var i = 0; i < btns.length; i++) {
					btns[i].style.backgroundColor = '';
				}
			//(2)然后才让当前的元素背景颜色为pink留下我自己
				this.style.backgroundColor = 'pink';
			}
		}
  </script>
</body>
//2.首先先排除其他人,然后才设置自己的样式这种排除其他人的思想我们成为排他思想

获取自定义属性值

<body>
    <div id="demo" index="1" class="nav"></div>
    <script>
        var div = document.querySelector('div');
        // 1. 获取元素的属性值
        // (1) element.属性
        console.log(div.id);
        //(2) element.getAttribute('属性')  get得到获取 attribute 属性的意思 我们程序员自己添加的属性我们称为自定义属性 index
        console.log(div.getAttribute('id'));
        console.log(div.getAttribute('index'));
        // 2. 设置元素属性值
        // (1) element.属性= '值'
        div.id = 'test';
        div.className = 'navs';
        // (2) element.setAttribute('属性', '值');  主要针对于自定义属性
        div.setAttribute('index', 2);
        div.setAttribute('class', 'footer'); // class 特殊  这里面写的就是class 不是className
        // 3 移除属性 removeAttribute(属性)    
        div.removeAttribute('index');
    </script>
</body>
注意:
1.element.属性  获取内置属性值(元素本身自带的属性)
2.element.getAttribute('属性');  主要获得自定义的属性 即我们自定义的属性

H5自定义属性
自定义属性目的:为了保存并使用数据。有些数据可以保存到页面中而不用保存到数据库中

H5规范
H5规定自定义属性 data- 开头作为属性名并且赋值
如< div data-index = ‘1’>< /div> 、element.setAttribute(‘date-index’,2)

H5获取自定义属性
1.兼容性获取element.getAttribute( 'data-index’);
2.H5新增 element.dataset.index 或者 element.dataset[‘index’ ] ie11才开始支持

<body>
    <div getTime="20" data-index="2" data-list-name="andy"></div>
    <script>
        var div = document.querySelector('div');
        // console.log(div.getTime);
        console.log(div.getAttribute('getTime'));
        div.setAttribute('data-time', 20);
        console.log(div.getAttribute('data-index'));
        console.log(div.getAttribute('data-list-name'));
        // h5新增的获取自定义属性的方法 它只能获取data-开头的
        // dataset 是一个集合里面存放了所有以data开头的自定义属性
        console.log(div.dataset);
        console.log(div.dataset.index);
        console.log(div.dataset['index']);
        // 如果自定义属性里面有多个-链接的单词,我们获取的时候采取 驼峰命名法
        console.log(div.dataset.listName);
        console.log(div.dataset['listName']);
    </script>
</body>
注意:
如果自定义属性里面有多个-链接的单词,我们获取的时候采取 驼峰命名法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值