DOM选择器

DOM
选择器以及内容文本操作

原理:将整个HTML看作一个大对象,对象嵌套对象

与JavaScript的关系:JavaScript定义了一个函数后,通过DOM对元素进行选取和操作。

一、查找
直接
document.getElementById('i1')
document.getElementsByName #s,获取的是多个元素[]列表,根据name属性获取标签集合
document.getElementsByClassName 根据class属性获取标签集合
document.getElementsByTagName 根据标签名获取标签集合
间接
parentElement // 父节点标签元素
children // 所有子标签
firstElementChild // 第一个子标签元素
lastElementChild // 最后一个子标签元素
nextElementtSibling // 下一个兄弟标签元素
previousElementSibling // 上一个兄弟标签元素

二、操作
文本操作:
obj.innerText #获取该标签内文本,忽略内部标签 #不能对[]操作
obj.innerHTML #包含了内部标签和文本
obj.value #获取当前标签的值,一般针对input等
input
select select标签有selectedIndex,0,1,2等
textarea


obj.innerText = "<a href='http://www.baidu.com'>百度</a>"; #显示为文本
obj.innerHTML = "<a href='http://www.baidu.com'>百度</a>"; #显示为超链接

例子:输入框提示“请输入关键字”和移除
onfocus() 光标移至时触发
onblur() 光标移开时触发

现在html的input标签有了 placeholder = ‘请输入关键字’,功能类似

样式操作:

.className='c1' #创建class属性,整体操作
.classList #获取所有的class列表,首单词小写,后面所有单词大写
.classList.add('c2') #增加指定样式
.classList.remove('c2') #删除

obj.style
.fontSize = '16px' # 不同于css
.color
.backgroundColor

属性操作
obj.attributes #获取所有属性
obj.setAttribute('xxxx','alex');
obj.removeAttribute('value') #去掉value属性值

obj.src 修改链接

标签创建:
字符串形式:var tag = "<input type='text'/><hr />";
对象形式: var tag = document.createElement('input');
tag.setAttribute('type','text');

标签操作:
方式一:对应字符串形式创建标签
var tag = "<input type='text'/><hr />";
document.getElementById('i1').insertAdjacentHTML('beforeEnd',tag);

注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'

方式二:对象形式创建标签
var tag = document.createElement('input');
tag.setAttribute('type','text');
document.getElementById('i1').appendChild(tag);

提交表单:
document.getElementById('').submit()

其他操作:
console
alert
confirm() 弹出确认框,返回一个布尔值,true or false

//url和刷新
location.href
location.href="" #重定向,跳转
location.reload() #页面刷新

//定时器
setInterval 多次定时器
clearInterval 清除多次定时器
setTimeout(function(){},5000) 单次定时器,对比setInterval,它只执行一次
clearTimeout 清除单次定时器

var obj = setInterval(function(){},5000)
clearInterval(obj) 这个清除定时器还可以放置在function内

示例:模态对话框
document.getElementsByClassName('c1')[0].classList.add('hide'); #通过类找到的是列表
document.getElementById('c1').classList.remove('hide');

全选和反选示例

函数名取值时记得不要和预设的冲突了

function reverseall() {
var tb = document.getElementById('tb'); #获取总父标签
var tr = tb.children; #所有孩子
for( var i=0;i<tr.length;i++){
var checkbox = tr[i].children[0].children[0]; #第一个孩子
if(checkbox.checked){
checkbox.checked = false; #获取打钩框的值
}else{
checkbox.checked = true;
}

}
}

示例:左侧管理菜单

function changeMenu(ths) {
var item_list = ths.parentElement.parentElement.children;
for(i=0;i<item_list.length;i++){
var item = item_list[i];
item.children[1].classList.add('hide') #所有添加hide
}
ths.nextElementSibling.classList.remove('hide') #当前菜单remove hide
}

三、事件:
onclick,onblur,onfocus
行为、样式、结构 相分离的页面(js、css、html分开):
把css写到style标签内,onclick放在script标签内,通过tag.onclick = function(){}匿名函数触发

总结:两种方式
直接标签内onclick
获取dom对象然后进行绑定
this:
直接标签内绑定函数时:script内的this代指全局变量,除非在标签内传this,

<input type="button" onclick="Click(this)" />

function Click(ths){
//ths
}
获取DOM对象时:代指当前触发事件的标签,是一个DOM对象

<input type="button" id="i1"/>

document.getElementById('i1').onclick=function(){
//this
}

例子:
var myTrs = document.getElementByTagName();
var len = myTrs.length;
for(var i=0;i<len;i++){
myTrs[i].onmouseover = function(){
*** myTrs[i].style.color = ''; #报错,js作用域的问题,function一开始不执行
等到鼠标点击的时候i=2已创建好,改this
}
}
绑定事件的另一种方式:
.addEventListener('click',function(){console.log('main')},false);
.addEventListener('click',function(){console.log('content')},false);

false表示冒泡,从里向外,true表示捕捉,从外向里

决定了console的执行顺序,false先content后main
词法分析:
active object AO
1.形式参数
2.局部变量
3.函数声明表达式

分析时,AO的优先性:函数表达式>形式参数>局部变量
执行时,从上到下逐句赋值执行

function t(age) {
console.log(age);
var age=27;
console.log(age);
function age() {}
console.log(age);
}
t(3)
输出:f age(){} 27 27

猜你喜欢

转载自www.cnblogs.com/czlong/p/9382188.html