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

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

Wu.Ang
Wu.Ang原创
2022年08月29日 12:17:48296浏览

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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议