DOM操作-选取、增删改查

dom对象的innerText和innerHTML有什么区别?

innerHTML:在读模式下,innerHTML属性返回与调用元素的所有子节点(包括元素、注释与文本节点)对应的HTML标记;在写模式下,innerHTML会根据指定的值创建新的DOM树,然后用这个DOM树完全替换调用元素原先的所有子节点。浏览器不同返回的innerHTML值也不一定相同。
innerText:读模式下,innerText会按照由浅入深的顺序将子文档树中的所有文本拼接起来;写模式下,会删除元素的所有子节点,插入包含相应文本值的文本节点。浏览器不同返回的innerText值也不一定相同。

区别:

  • innerHTML已被HTML5纳入规范,innerText没有。
  • innerHTML返回元素的HTML结构,innerText返回元素内包含的文本内容。

elem.children和elem.childNodes的区别?

  • elem.children返回元素中的元素子节点,是HTMLCollection的实例;
  • elem.childNodes返回元素中的所有子节点(包括空白文本节点),childNodes中保存着一个NodeList类数组对象(有length属性但并不是Array的实例),可通过方括号语法来访问NodeList的值。

大多数情况下使用children属性,在元素只包含元素子节点时,这两个属性的值相同。

查询元素有几种常见的方法?ES5的元素选择方法是什么?

7种查询元素的方法,其中querySelector()和querySelectorAll()为ES5的元素选择方法

  • getElementById():接收一个参数:要取得的元素的ID(区分大小写,必须严格匹配),找到则返回该元素,没找到返回null。
  • getElementsByClassName():接收一个参数,这个参数可以是多个空格分隔的class名字,返回同时具有这些节点的元素。
  • getElementsByTagName():接收一个参数:要取得的元素的标签名(不区分大小写),返回的是包含若干个元素的NodeList,在HTML中会返回一个HTMLCollection对象。
  • getElementsByName():接收一个参数:带有给定name属性值的元素,也会返回一个HTMLCollection对象。最常用的场景是取得单选按钮。
  • querySelector():接收一个参数:CSS选择器的名称,返回匹配指定CSS选择器的第一个元素节点(无法选中CSS伪元素),没有发现匹配的节点则返回null。
  • querySelectorAll():接收一个参数:CSS选择器的名称,返回匹配指定CSS选择器的所有节点,返回的是NodeList对象,该对象不是动态集合,元素节点的变化无法实时反映在结果中。
  • elementFromPoint():接收两个参数:分别是相对于当前窗口左上角的横纵坐标,单位为CSS像素,返回位于页面指定位置的元素,如果该元素不可返回(如滚动条)则返回它的父元素,如果坐标值无意义(如负值)则返回null。
<body>
  <h2 id="aa">hello</h2>
  <p class="bb">world</p>
  <div>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
    <li>item 4</li>
  </div>
  <input type="radio" name='fav-color'>red
  <input type="radio" name='fav-color'>orange
  <input type="radio" name='fav-color'>pink
  <input type="radio" name='fav-color'>blue
  <script>
    var h2 = document.getElementById("aa");
    console.log(h2);

    var p = document.getElementsByClassName("bb");
    console.log(p); 

    var div = document.getElementsByTagName("div");
    console.log(div);

    var input = document.getElementsByName("fav-color");
    console.log(input);

    var li = document.querySelector("li");
    console.log(li);

    var allLi = document.querySelectorAll("li");
    console.log(allLi);

    var frompoint = document.elementFromPoint(100, 100);
    console.log(frompoint);
  </script>
</body>

如何创建一个元素?如何给元素设置属性?如何删除属性

  • 创建
    • 创建元素:creatElement(tagName):用来生成HTML元素节点,参数为引号包裹的元素的标签名。
    • 创建文本节点:creatTextNode(content):用来生成文本节点,参数为所要生成的文本节点的内容。
    • 创建DOM片段:creatDocumentFragment():生成一个DocumentFragment对象。该对象是一个存在于内存的DOM片段,不属于当前文档,常用来生成较复杂的DOM结构,然后插入当前文档。这样做的好处在于,因为DocumentFragment不属于当前文档,对它的任何改动,都不会引发网页的重新渲染,比直接修改当前文档的DOM有更好的性能表现。
<script>  
  var div = document.createElement("div");
    div.id = "myNEWDIV";
    div.className = "box";
    document.body.appendChild(div);
    var content = document.createTextNode("hello dolby");
    div.appendChild(content);
    console.log(div);
    var docFrag = document.createDocumentFragment("nav");
    docFrag.id = "navbar";

    var a = document.createElement("a");
    var a_content = document.createTextNode("导航");
    a.appendChild(a_content);
    docFrag.appendChild(a);
    document.body.appendChild(docFrag);
  </script>
  • 设置属性:setAttribute(attr,value):接收两个参数,引号包裹的属性名与引号包裹的属性值
var node = document.getElementById("div1");
node.setAttribute("my_attrib", "newVal");

等同于

var node = document.getElementById("div1");
var a = document.createAttribute("my_attrib");
a.value = "newVal";
node.setAttributeNode(a);
  • 删除属性:removeAttribute(attr):接收一个参数,即要删除的属性名
node.removeAttribute('id');

如何给页面元素添加子元素?如何删除页面元素下的子元素?

  • 添加元素:
    appendChild():在元素末尾添加元素
var newDiv = document.createElement("div");
var newContent = document.createTextNode("Hello");
newDiv.appendChild(newContent);
  • 插入元素:
    insertBefore(newchild,refchild):在某个元素之前插入元素
var newDiv = document.createElement("div");
var newContent = document.createTextNode("Hello");
newDiv.insertBefore(newContent, newDiv.firstChild);
  • 替换元素:
    replaceChild(newEle,oldEle)接受两个参数:要插入的元素和要替换的元素
newDiv.replaceChild(newElement, oldElement);
  • 删除元素:
    removeChild()
parentNode.removeChild(childNode);

element.classList有哪些方法?如何判断一个元素的 class 列表中是否包含某个 class?如何添加一个class?如何删除一个class?

  • 方法:
    • item():取得classList中的每个元素
    • add(value):将给定字符串值添加到classList类名列表中,值已经存在就不添加
    • remove(value):从列表中删除给定字符串
    • contains(value):表示列表中是否存在给定的值,存在返回true,否则返回false
    • toggle(value):如果列表中存在给定值,删除它,如果不存在,添加它。
  • 判断是否包含某个class:
    用contains()方法:
if(element.classList.contains("className")){
  //  执行操作
}
  • 添加一个class
element.classList.add("className");
  • 删除一个class
element.classList.remove("className");
  • 切换一个class
element.classList.toggle('kevin')

如何选中如下代码所有的li元素? 如何选中btn元素?

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

推荐阅读更多精彩内容

  • 基本介绍 文档对象模型 (DOM) 是HTML和XML文档的编程接口。它给文档(结构树)提供了一个结构化的表述并且...
    草鞋弟阅读 430评论 0 0
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,354评论 0 44
  • 1、 dom对象的innerText和innerHTML有什么区别? innerText是一个可写属性,返回元素内...
    zh_yang阅读 311评论 0 0
  • 爱 放弃了距离 恨 放弃了忘记 我 放弃了回忆
    泊客行阅读 137评论 0 0
  • 和姑娘相遇是在三年前的一个傍晚,一个转身就撞上了姑娘。那时候,姑娘的那种清纯可爱我就一眼对上了,慢慢的我们彼此...
    零点六度C阅读 175评论 0 1