第二十六节:class和焦点的操作管理

1、关于class的操作

IE9以下的getElementsByClassName()方法兼容问题

//<p>Hello World</p>
//<p class="a">增加样式 World</p>
//<ul id="ul"></ul>
function getClass(classA){
	if (document.getElementsByClassName) {
	        return document.getElementsByClassName(classA)
	}else{
	    //兼容IE9一下
		var getClassArr=[];
		var nodeArr=document.getElementsByTagName('*');
		for(let i=nodeArr.length-1;i>=0;i--){
			if(nodeArr[i].className.indexOf(classA)>=0){
				getClassArr.push(nodeArr[i]);
			}
		}
		return getClassArr;
	}
}
console.log(getClass('a')[0].innerText);

注意:
1、以上兼容方法性能会下降
2、getElementsByClassName()得到的为HTMLCollection动态合集,自己写的兼容方法为一个数组,不是动态合集。
3、通过ID获取DOM节点比通过Class获取节点

HTML DOM classList 属性

classList 属性返回元素的类名;作为 DOMTokenList 对象。该属性用于在元素中添加,移除及切换 CSS 类。classList 属性是只读的,但你可以使用 add() 和 remove() 方法修改它

//HTML
//<div id="bar" class="ceshi class1"></div>
var bar=document.getElementById('bar');
//添加类
bar.classList.add('xinzeng','xinzeng2');
//移除类
bar.classList.remove('class1','xinzeng2');
console.log(bar.classList.contains('fc_black'));//false
console.log(bar.classList.contains('ceshi'));//true
console.log(bar.classList.item(1));//xinzeng

注意:
当增加多个类时,会将所有class增加完成后,一次进行渲染;而非多次渲染。因为渲染器和解释器是只能一个在工作,所以先一次性渲染完成。

//<style>
//.bg_color{ background:#ff0;}
//.fc_red{ color:#f00;}
//.fc_green{ color:green;}
//</style>
//<button onclick="clickToggle()">toggle</button>
//<button onclick="clickToggle(1)">红色</button>
//<button onclick="clickToggle(2)">绿色</button>
//<div id="bar" class="ceshi class1">测试</div>
<script>
function clickToggle(type){
	var bar=document.getElementById('bar');
	if(type==1){
		bar.classList.toggle('fc_red',true);
		bar.classList.toggle('fc_green',false);
	}else if(type==2){
		bar.classList.toggle('fc_red',false);
		bar.classList.toggle('fc_green',true);
	}else{
		bar.classList.toggle('bg_color');
	}
}
</script>

2、关于焦点的操作

activeElement 属性返回文档中当前获得焦点的元素
为元素设置焦点,可以使用 element.focus() 方法
可以使用 document.hasFocus() 方法来查看当前元素是否获取焦点

//<body onclick="clickElement()">
//<button>toggle</button>
//<button>红色</button>
//<button>绿色</button>
//<input type="text" placeholder="请输入内容" />
//<p>1111</p>
//</body>
<script>
window.onload = function(){
	var x = document.activeElement.tagName;
	console.log(x);  //页面刚加载完,获取焦点的元素为BODY,如果未加载完,x为null
}
function clickElement(){
	var x = document.activeElement.tagName;
	console.log(x); //点击页面上的其他元素,则会返回对应的元素标签,button和input则返回BUTTON和INPUT,其他则返回BODY
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值