DOM元素的选取和创建

DOM

html里有head,body,div等等各种元素,元素本身有有各种属性,而JS是可以选中这些元素,并编辑它们的,选择后,元素就是成了JS操作的对象了,元素会有了一些对应的属性,对应的还会有一些方法,,,这样,就把html这个文档对象化了,用JS去操作这个文档,就是操作一个对象。

对象

  • document对象及其属性
document.body
<body class=​"input zh cn win reader-black-font">​…​</body>​<div class=​"shutdown">​…​</div>​<div id=​"writer" class=​"container-fluid" data-writer-version=​"44">​…​</div>​<script src=​"/​/​cdn2.jianshu.io/​assets/​writing-faa004dce5ba8214fd37c5ac0c0a7c8c5d70c0249fac415efca4e8930d0ad329.js">​</script>​<script id=​"init-script" type=​"text/​javascript" charset=​"utf-8">​…​</script>​<div id=​"flash" class=​"hide">​</div>​<script>​…​</script>​</body>​
document.head
<head>​…​</head>​
document.charset
"UTF-8"
document.doctype

document.readyState    //返回当前文档的状态
loading      :加载html没解析
interactive   :加载外部资源
complete      :完成
  • document.location
document.location
Location {href: "http://www.jianshu.com/writer#/notebooks/14005525/notes/16978125/preview", ancestorOrigins: DOMStringList, origin: "http://www.jianshu.com", replace: function, assign: function…}ancestorOrigins: DOMStringListassign: function ()hash: "#/notebooks/14005525/notes/16978125/preview"host: "www.jianshu.com"hostname: "www.jianshu.com"href: "http://www.jianshu.com/writer#/notebooks/14005525/notes/16978125/preview"origin: "http://www.jianshu.com"pathname: "/writer"port: ""protocol: "http:"reload: function reload()replace: function ()search: ""toString: function toString()valueOf: function valueOf()Symbol(Symbol.toPrimitive): undefined__proto__: Location

document.location.href
"http://www.jianshu.com/writer#/notebooks/14005525/notes/16978125/preview"
document.location.protocol
"http:"
document.location.host
"www.jianshu.com"
document.location.port
""
document.location.search
""

document.location === location  //true
document.location === window.location  //true
document.location.assin('http://www.geogle.com')
//跳转页面

document.open(),document.close(),document.write()

document.write('hello')   //页面清空,出现文本hello,再重复操作一次,又输出一次,上一次不清空

原本的页面渲染完成之后,解析的文档就关闭了,这时候documen.write就是重新打开一个新文档,以前的渲染是已经关闭了的文档的。而这个时候,新文档一直打开着,所以,上一次不清空。直到document.close作用后,这个文档关闭,再运行document.write就会清空再重写了。不要随便用这玩意了哦。

Element

具体的元素,对象
DOM操作就是选择它,处理它。
页面上的节点有几个重要属性:

  • 标签
  • 元素类型
  • 类名
  • 元素id
  • 子元素列
  • 兄弟元素
  • 父元素
document.getElementById('target')
document.getElementsByClassName('box')[0]
document.getElementsByName('username')
document.getElementsByTagName('div')    //标签
document.getElementsByTagName('body')  === document.body    //true
document.getElementsByClassName('box')[0].getElementsByClassName('child')   //嵌套

都是ES3里的,很烦。
ES5里,querySelector:

document.querySelector('.box .child')
document.querySelector('#target')
document.querySelector('div')      //只会选择第一个,不会多选
document.querySelectorAll('div')    //选了全部

在测试时,在控制台,选id的,可以直接写id就选中了,但是html中不能如此。

function $(selector){
    return document.querySelector(selection) 
}
$('#target')

创建

createElement

var div = document.createElement('div')   //虚拟节点,只是占内存,页面不显示
var text= document.createTextNode('jirengu')     //文本节点

createDocumentFragment
创建一个对象,针对它进行操作,然后再把它放到页面上,避免重新计算和渲染。存在于内存中的DOM片段,但是不属于当前文档。

修改元素

var div = document.createElement('div')
var content = document.createTextNode('hello')
div.appendChild('content')
div        //<div>hello</div>
假设有个ul的class是navbar:
var navbarNode = document.querySelector('.navbar')
for (i=0;i<5;i++) {
        var child =document.createElement('li')
        var text =child.appendChild('i')
        navbarNode.appendChild(child)     //把li放到navbar的ul里
}

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

推荐阅读更多精彩内容

  • 转载说明 一、介绍 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在地址栏输入g...
    17碎那年阅读 2,437评论 0 22
  • 一、JS前言 (1)认识JS 也许你已经了解HTML标记(也称为结构),知道了CSS样式(也称为表示),会使用HT...
    凛0_0阅读 2,752评论 0 8
  • 一、概述 document节点是整个文档树的顶层节点,每张网页都有自己的document节点。window.doc...
    周花花啊阅读 1,305评论 0 1
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • 最新版程序请查看 《使用Java实现串口通信(二)》 1.介绍 使用Java实现的串口通信程序,支持十六进制数据的...
    容华谢后阅读 10,295评论 2 20