DOM元素的属性和其他操作

属性操作

getAttribute()获取元素的属性值

同样的还有:

  • createAttribute()
  • setAttribute()
  • removeAttribute()
var node =document.Element('div')
node.setAttribute('my-attrib','newval')
//相当于先创建属性,再设值了

在html中有:
<a href="#">haha</a>
//我想把href的链接改掉,,,
var link =document.querySelector('a')
link.setAttribute('id','login')
link..setAttribute('id','logout')
link.getAttribute('id')
link.removeAttribute('id')

在页面上引入新的JS:
var scri = document.createElement('script')
 scri.setAttribute('src','http://jnfnfanf.com')
document.body.appendChild(scri)

innerHTML,outerHTML,innerText

  • 1 后台要数据
  • 2 遍历数组,拼接相加就行,字符串
  • 3 一次性把拼接好的html放到对应的空的节点下
html中class=navbar的ul和li的形式下:
var navbarDate =[1,2,3]
var html = ''
navbarDate.forEach(function(item){
        html += '<li>' +item +'<li>'
})
html    //"<li>1</li><li>2</li><li>3</li>"
document.querySelector(.navbar).innerHTML = html
document.querySelector(.navbar)     //修改html,把字符串放到html上,当成标签并执行。

与之对应的是innerText:
标签下的文本内容。
document.querySelector(.navbar).innerText = html
"<li>1</li><li>2</li><li>3</li>"      //页面出现了这些,以文本 形式,并不执行。

innerHTML有安全问题,数据一定不要是用户填写的:

var navbarDate = [1,2,3,'<script>alert(1)</script>']
然后script标签的内容会被执行的。

所以,最好的还是,创建DOM节点,用innerText调文本,然后放到页面上。

使用方式

设置样式style

node.style.color ='red'
node.style.backgroundColor = ''blue''
document.querySelector('#hello').style.backgroundColor = 'black'    //就是操作页面上的DOM节点上的style属性
//<p id="hello" style="background-color: red">ahhaahha</p>一般权重是最高的,其他地方除非有!important的最终权重
document.querySelector('#hello').style.fontSize
//获取不到字体大小,因为这个时候,节点上的style里没有font-size的值

获取getComputedStyle

获取最终计算后的结果。

getComputedStyle(document.querySelector('#hello'))
//得到一个关于目标的属性和值的对象,通过下标可以获取
getComputedStyle(document.querySelector('#hello'))['font-size']    
或者:
getComputedStyle(document.querySelector('#hello')).fontSize

class操作

  • .classList 查看
  • .add('active') 新增
  • .remove('active') 删除
  • .toggle('active') 切换
  • .contains(''active) 判断是否拥有
    样式的改变尽量用class的新增和删除实现。
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
<style>
.box{
  border:1px solid #222;
  padding: 10px;
  box-shadow:1px 1px 2px 2px rgba(0,0,0,.14);
}
.box.active{
  color: #fff;
  background: #000;
}
</style>
</head>
<body>
  <div class="box">
 <h1>hahaha</h1>   
<p>hello</p>
  </div>
<button class="add">add</button>
  <button class="remove">remove</button>
  <button class="toggle1">toggle1</button>
  <button class="toggle2">toggle2</button>
<script>
var addbtn = document.querySelector('.add')
var rembtn = document.querySelector('.remove')
var tog1btn = document.querySelector('.toggle1')
var tog2btn = document.querySelector('.toggle2')
var boxPanel = document.querySelector('.box')

addbtn.onclick = function(){
  boxPanel.classList.add('active')  
}
rembtn.onclick = function(){
  boxPanel.classList.remove('active')
}
tog1btn.onclick = function(){
  if(boxPanel.classList.contains('active')){
    boxPanel.classList.remove('active')
  }else{ 
    boxPanel.classList.add('active')
  }

}
tog2btn.onclick =function(){
  boxPanel.classList.toggle('active')
}
</script>
</body>
</html>

页面宽高,内容,滚动条

  • element.clientHeight:元素的内容的高度,不包括它的border和margin;clientWidth也就是元素内容的宽度,不包括滚动条的宽度。
  • offsetHeight:包括元素的内容的高度,包括它border的宽度,不包括margin;clientWidth同理。

这两个值有个域的意义,必须算容器内部的元素内容的值,也就是说,当容器固定了高度,内容超出了,以容器为计算标准。

document.body.clientHeight
1097
document.body.offsetHeight
1097
//因为没有给body加边框,所以相等。加了就不一样了。
  • scrollHeight:元素滚动内容的总长度:offsetHeight+margin——最根本在于内容变化,如果容器固定高度,内容超出,以最开始的margin和最底部的内容的外边距算。
  • scrillTop: 滚动的高度。
  • innerHeight: 窗口高度。
    如何判断一个元素出现在了窗口中?
node.scrollHeight      //滚动条高度+窗口高度
这时候,移动目标元素,当刚出现元素在窗口时:
node.scrollTop     //滚动条滚动的距离
这时候,目标再滚动一个窗口的高度就会消失了。
所以,只要确保滚动条滚动的距离在这时候的node.scrollTop和其加上innerHeight的值之间就可以的。

如何判断是否滚动到页面底部?

node.scrollHeight - node.scrollTop < innerHeight
//近似可以判断了

HTMLCollection,NodelllList

基本没区别,区别就是方法不一样,NodeList有forEach,前者则没有。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容