Blogger Information
Blog 19
fans 0
comment 0
visits 8370
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
操作class属性、事件、传递机制、表单事件、字符串常用api
Wu.Ang
Original
295 people have browsed it

js 操作class属性、事件、传递机制、表单事件、字符串常用api

classList 操作class属性

  1. add() : 添加class属性
    h1.classList.add('red');

  2. contains() : 判断是否有xx属性
    console.log(h1.classList.contains('red'));

  3. replace(‘原属性’,’新属性’) : 替换
    h1.classList.replace('red','blue');

  4. remove() : 移除样式
    h1.classList.remove('blue');

  5. toggle() : 自动切换,如果有这个样式就去掉,如果没有就加上
    h1.classList.toggle('blue');

事件 : 1.名称 2.目标 3.方法

1.on+type : 添加和取消

  1. const btn =document.querySelector('button');
  2. // 事件添加
  3. btn.onclick = function(){
  4. // event : 预定义对象,保存了绑定到当前事件主体上的事件对象详情
  5. console.log(event);
  6. alert('hello');
  7. }
  8. // 事件移除
  9. btn.onclick = null;

2.addEventListener(事件名称,事件回调方法,触发阶段) : 事件监听

  1. const show = function() {
  2. console.log(event);
  3. }
  4. const btn2 = document.querySelector('button:nth-of-type(2)');
  5. btn2.addEventListener('click', show, false);
  6. // 事件取消
  7. // 使用了事件监听时,如果需要取消事件,就不能用回调函数来声明事件的方法
  8. btn2.removeEventListener('click', show, false);

3.dispatchEvent() : 事件派发
4.定时器 1.setTimeout(执行的操作,时间) 单次执行 2.setInterval() 多次执行

  1. const btn3 = document.querySelector('button:nth-of-type(3)');
  2. /*
  3. 1.创建一个自定义事件
  4. 2.将这个元素自动派发给指定的元素并触发它
  5. */
  6. let i = 0;
  7. btn3.addEventListener('click', function() {
  8. if (i >= 10) {
  9. return false;
  10. } else {
  11. i += 0.5;
  12. console.log(`已经赚了${i}元`);
  13. }
  14. }, false);
  15. // 创建一个自定义事件 : 可以基于预定义事件
  16. const myEvent = new Event('click');
  17. btn3.dispatchEvent(myEvent);
  18. // 定时器 分两种
  19. // 1.
  20. // setTimeout(执行的操作,时间单位毫秒) 单次执行
  21. setTimeout(function(){
  22. btn3.dispatchEvent(myEvent);
  23. },5000)
  24. // 2.
  25. // setInterval
  26. let timer = setInterval(function(){
  27. btn3.dispatchEvent(myEvent);
  28. },3000);
  29. // 清空定时器 clearInterval()
  30. if(i>=10){
  31. clearInterval(timer);
  32. };

事件传递机制

事件对象 event

console.log(event);

  1. 事件主体 : 把这个事件绑定到了那个元素上
    console.log(event.currentTarget);

  2. 事件目标
    console.log(event.target);

事件冒泡 : 当前元素的事件会向上(父级)进行传递,当父级有同名事件时会自动触发

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <ul>
  11. <li class="item">item1</li>
  12. <li class="item">item2</li>
  13. <li class="item">item3</li>
  14. <li class="item">item4</li>
  15. <li class="item">item5</li>
  16. </ul>
  17. <script>
  18. const li = document.querySelectorAll('li');
  19. li.forEach((li) => li.onclick = () =>console.log(event.currentTarget));
  20. // li的父级ul
  21. document.querySelector('ul').onclick = () =>console.log(event.currentTarget);
  22. // ul的父级body
  23. document.querySelector('body').onclick = () =>console.log(event.currentTarget);
  24. // body的父级html
  25. document.documentElement.onclick = () =>console.log(event.currentTarget);
  26. // html的父级document
  27. document.onclick = () =>console.log(event.currentTarget);
  28. // document的父级window
  29. window.onclick = () =>console.log(event.currentTarget);
  30. </script>
  31. </body>
  32. </html>

阻止冒泡 : stopPropagation()

  1. const li = document.querySelectorAll('li');
  2. li.forEach((li) => li.onclick = () =>console.log(event.currentTarget) + event.stopPropagation());

事件委托/事件代理 : 将子元素的事件,委托在父元素上触发,以简化代码

  1. const ul = document.querySelector('ul');
  2. ul.onclick = () => console.log(event.target.dataset.index) + console.log(event.currentTarget);
  3. // 事件目标 target : li 事件的触发者
  4. // 事件主体 currentTarget : ul 事件的绑定者/事件的拥有者

表单事件

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>表单事件</title>
  8. </head>
  9. <body>
  10. <form action="login.php" method="post" id="login">
  11. <label class="title">用户登录</label>
  12. <label for="email">邮箱:</label>
  13. <input type="email" id="email" name="email" value="" autofocus />
  14. <label for="password">密码:</label>
  15. <input type="password" id="password" name="password" />
  16. <button name="submit" onclick="check(this)">登录</button>
  17. </form>
  18. </body>
  19. </html>
  1. 禁用button的直接提交

    1. 修改button类型 : type=”button”
      <button type="button" name="submit" onclick="check(this)">登录</button>

    2. 取消form表单元素的默认提交行为
      <form action="login.php" method="post" id="login" onsubmit="return false"></form>

    3. 禁用提交按钮的默认行为

      1. function check(ele){
      2. event.preventDefault();
      3. }
  2. 非空验证

每一个表单控件 input, button, select…都有一个属性form,是当前表单的引用

  1. function check(ele) {
  2. console.log(ele.form);
  3. // email
  4. let email = ele.form.email;
  5. // password
  6. let password = ele.form.password;
  7. if (email.value.length === 0) {
  8. alert('邮箱不能为空');
  9. email.focus();
  10. return false;
  11. } else if (password.value.length === 0) {
  12. alert('密码不能为空');
  13. password.focus();
  14. return false;
  15. }
  16. }

字符串常用api

1.根据索引获取值 : str[0]/str.charAt(1)

console.log(str[0]);

console.log(str.charAt(1));

2.根据值获取索引 : indexOf(p)/scarch(p)

console.log(str.indexOf(p));

console.log(str.scarch(p)); 没有返回-1

3.字符串拼接 : concat(‘value’)

通常用 ‘+’ 或 模板字面量(反引号) ``

console.log(str.concat('value')); //逗号分割

console.log(str.concat('(','value',')'));

4.字符串替换 : replace(‘需要修改的值’,’内容’)

console.log(str.replace('php','value'));

5.从左侧截取字符串 : slice(开始位置0,结束位置3) / 右侧 substr(开始位置0,截取字符数量3)

支持负数,最右边是-1,以此向左类推 substr(-3,3) 必须从左向右获取

6.大小写

  1. 小写转成大写:toUpperCase()/toLocaleUpperCase()
  2. 大写转成小写:toLowerCase()/toLocaleLowerCase()

首字母大写 : str.slice(0,1).toUpperCase() +str.slice(1).toLowerCase();

7.去掉字符串前后的空格 : trim()

console.log(str.trim());

8.将字符串分割成数组 : split()

console.log(str.split('h'));

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post