当前位置: 首页 > news >正文

原生JS操作DOM

html例子结构

<div class="one">
	<p>1234</p>
</div>
<div class="two">
	<p>2456</p>
</div>
<div class="two">
	<p>789</p>
</div>
复制代码

操作一个类,拿到类的属性,并进行控制

var one = document.querySelector('.one');
one.style.color="blue";
复制代码

操作所有相同的类,有两种方法。

1.getElementsByClassName()
2.querySelectorAll()
复制代码

因为js获得的节点中返回所有类是一个数组,所以要对其进行循环控制 用循环长度的方式

1.var two = document.querySelectorAll('.two');
		for(var i=0;i<two.length;i++){
			two[i].style.color="green";
		}


2.var two=document.getElementsByClassName("two")
		 for(var i=0;i<two.length;i++){
		 	two[i].style.color="red";
		}
复制代码
  • getElementsByClassName的性能比querySelectorAll好的多

  • getElementsBy返回的是Live Node List

  • querySelectorAll返回的是Static Node List

  • querySelectorAll可以用数组循环的方式

    var two = document.querySelectorAll('.two'); two.forEach(function(item){ item.style.color="green"; })

  • 操作父元素 ele.parentElement

  • 操作子元素 ele.children

  • 查询子元素 ele.getElementsByClassName ele.getElementsByTagName

  • 当前元素的第一个/最后一个子元素节点 ele.firstChild ele.lastChild

  • 下一个/上一个兄弟元素节点 ele.nextSibling; ele.previousSibling

获取节点属性

el.getAttribute('class')
el.getAttribute('id')
复制代码

设置节点属性

ele.setAttribute('class','sss');
复制代码

判断、移除属性

el.hasAttribute('class'); el.removeAttribute('class');
复制代码

获取文本值.innerHTML

js添加类

  var one = document.getElementById("oneId");
  one.classList.add("mystyle","ssss"); 
  one.classList.remove("mystyle");

 var twoClick = document.querySelectorAll('.twoClick');
    for (var i = 0; i < twoClick.length; i++) {		    	
    	twoClick[i].addEventListener('click',function(){

    		this.classList.add("addclass");
	})
}
复制代码

addClass hasClass removeClass toggleClass

function hasClass(obj, cls) {
return obj.className.match(new RegExp('(\s|^)' + cls + '(\s|$)'));
}

function addClass(obj, cls) {  
    if (!this.hasClass(obj, cls)) obj.className += " " + cls;  
}  
  
function removeClass(obj, cls) {  
    if (hasClass(obj, cls)) {  
        var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');  
        obj.className = obj.className.replace(reg, ' ');  
    }  
}  
  
function toggleClass(obj,cls){  
    if(hasClass(obj,cls)){  
        removeClass(obj, cls);  
    }else{  
        addClass(obj, cls);  
    }  
}  
复制代码

实现点击当前,其他删除,再次循环点击类的所有数组

var two = document.getElementsByClassName('two');
	for(var i=0;i<two.length;i++){
		two[i].addEventListener("click",function(){
			console.log(this.innerHTML);
			for(var j=0;j<two.length;j++){
				removeClass(two[j],'active')
			}
			addClass(this,'active');
		})
	}
复制代码

相关文章:

  • knn algorithm--python( classifying)
  • javascript常见问题总结
  • linux中find 查询命令
  • linux svn 使用
  • 【使用Postman测试web接口】Postman的安装与入门
  • 阿里开源了14个核心技术,你了解哪些?
  • 流式大数据处理的三种框架:Storm,Spark和Samza
  • Akka2
  • neo4j入门开发,以及在sns关系中的应用
  • Redis 替代品SSDB Java客户端
  • 获取URL地址中的GET参数
  • hadoop yarn 配置
  • android文件关联之mime type
  • 两年前端职业生涯总结
  • 云数据库Memcache版使用教程
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Android优雅地处理按钮重复点击
  • golang 发送GET和POST示例
  • js数组之filter
  • KMP算法及优化
  • Linux链接文件
  • Mybatis初体验
  • Python_网络编程
  • vue数据传递--我有特殊的实现技巧
  • 诡异!React stopPropagation失灵
  • 回流、重绘及其优化
  • 前嗅ForeSpider中数据浏览界面介绍
  • 小程序01:wepy框架整合iview webapp UI
  • - 转 Ext2.0 form使用实例
  • Python 之网络式编程
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (39)STM32——FLASH闪存
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Matlab)使用竞争神经网络实现数据聚类
  • (TOJ2804)Even? Odd?
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (九)One-Wire总线-DS18B20
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (转)Mysql的优化设置
  • (转)详解PHP处理密码的几种方式
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • . NET自动找可写目录
  • .CSS-hover 的解释
  • .gitignore
  • .gitignore文件—git忽略文件
  • .Net 6.0 处理跨域的方式
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net MySql
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)