美文网首页
DOM 节点的相应操作

DOM 节点的相应操作

作者: HarlieYang | 来源:发表于2019-02-28 14:41 被阅读0次

DOM的相关操作

什么是DOM

DOM (document object model) 文档对象模型,是W3C 组织推荐的处理可扩展标准语言的标准编程接口。 是HTML和XML文档的编程接口。DOM是独于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

认识 DOM

DOM可以将任何HTML描绘成一个由多层节点构成的结构。节点分为12种不同类型.每个节点都拥有各自的特点、数据和方法,也与其他节点存在某种关系。节点之间的关系构成了层次,而所有页面标记则表现为一个以特定节点为根节点的树形结构。 (节点类型一共有12种)

HTML文档可以说由节点构成的集合,DOM节点:(常用的3种)

  • 元素节点(Element):上图中<html>、<body>、<p>等都是元素节点,即标签。
  • 文本节点(text): 向用户展示的内容,如<li>...</li>中的JavaScript、DOM、CSS等文本。
  • 属性节点(Attr): 元素属性,如 <a> 标签的链接属性href="http://www.baidu.com"。

DOM 操作

节点至少包括nodeType、nodeName、nodeValue 三种基本属性

  • nodeType 返回节点类型的常数值
    元素节点              Node.ELEMENT_NODE(1)
    属性节点              Node.ATTRIBUTE_NODE(2)
    文本节点              Node.TEXT_NODE(3)
    CDATA节点             Node.CDATA_SECTION_NODE(4)
    实体引用名称节点       Node.ENTRY_REFERENCE_NODE(5)
    实体名称节点          Node.ENTITY_NODE(6)
    处理指令节点          Node.PROCESSING_INSTRUCTION_NODE(7)
    注释节点              Node.COMMENT_NODE(8)
    文档节点              Node.DOCUMENT_NODE(9)
    文档类型节点          Node.DOCUMENT_TYPE_NODE(10)
    文档片段节点          Node.DOCUMENT_FRAGMENT_NODE(11)
    DTD声明节点            Node.NOTATION_NODE(12)
    
    console.log(Node.ELEMENT_NODE)  // 1
    
  • nodeName 返回该节点的大写字母标签名
  • nodeValue 返回和设置当前节点的值
        let span = document.getElementById("span")
        console.log(span.nodeName)
        console.log(span.nodeType)
        console.log(span.nodeValue)
    

获取DOM节点

  • 原生js获取
    • document.getElementById("id") // 通过id获取单个标签
    • document.getElementsByClassName("classname") // 返回带有指定类名的NodeList。
    • document.getElementsByName("name") // 返回带有指定名称的NodeList。
    • document.getElementsByTagName("tagname") // 通过 标签名 获得 NodeList。
    • document.getElementsByTagNameNS("d",title) // 返回带有指定名称和命名空间的所有元素的 NodeList。xml
  • jquery 获取
    var $p_dom=$("p");    // 获取p节点
    $p_dom.attr("title"); // 输出p节点的title属性

    var $li_2=$("ul li:eq(1)");  // 获取第2个li节点   
    $li_2.attr("title");         // 第2个li节点的title属性
    $li_2.html();                // 第2个li节点的文本内容

创建DOM节点/属性

  • 原生创建
    var div = document.createElement('div')           // 创建一个节点

    var id = document.createAttribute('id') // 创建一个指定名称的属性
    id.value = "hui"  
    document.getElementById("box").setAttributeNode(id)

    text = document.createTextNode("text");   //创建文本节点
    div.appendChild(text)
    document.body.appendChild(div)
  • jquery 创建
    $li1=$("<li></li>")                    // 创建元素节点
    $li1=$("<li>text</li>")                // 创建文本节点
    $li3=$("<li title='榴莲'>榴莲</li>");  // 创建属性节点

    $("ul").append($li3);   // 新建节点添加到DOM树中  。append 添加dom节点

添加节点

  • 原生添加

    • jQuery.insertBefore(要插入的节点,指定节点)
    • jQuery.appendChild(要添加的节点) 追加
          div.insertBefore(span,p)   // 将span插入到div中的p前面
          div.appendChild(span)      // span添加到div的最后面
    
  • jquery 添加

    • before() 和 insertBefore
    • after() 和 insertAfter()
    • prepend()、prependTo()
    • append()、appendTo()

    组内的区别 : 返回的jquery对象不同。

        var li = $("<li>被添加的元素</li>")
        $("#box").before(li) 
        li.insertBefore($("#box")) 
    
        $("#box").after(li)
        li.insertAfter($("#box"))
    
        $("#box").append(li)
        li.appendTo($("#box"))
    
        let b = $("#box").prepend(li)  // 返回的是$("#box")对象,其他组一样
        let c =li.prependTo($("#box")) // 返回的是li对象 ,其他组一样其他组一样
        b.css("background","red")   
        c.css("background","red")
    

删除节点

  • 原生删除
    • removeChild() // box.removeChild(p) box中删除p元素
  • jquery删除
    • remove()
    • empty()
        $span = $("span").remove("span[id='span']")  // 返回值为所有的span元素
        $("#box").empty()                            // 清空所有的内容
    

节点的修改操作

  • 原生
    • cloneNode() 参数true 表示复制元素时也复制元素行为
    • node.replaceChild(newnode,oldnode)
  • jQuery 操作
    • 复制元素 clone() // 参数true 表示复制元素时也复制元素行为
    • 包裹节点
      • wrap()
      • wrapAll()
      • wrapInner()
          $("p").wrap("<div></div>")       // 每个p标签外面都被一个div元素包裹,
          $("p").wrapAll("<div></div>")    // 所有的p标签都被包裹到一个div元素中
          $("p").wrapInner("<div></div>")  // 每个p标签包裹一个div元素,p元素中的内容放在div中。  和wrap相反
      
      
    • 替换节点
      • repalcewith()
      • repalceAll()
          // div代替所有的p标签,写法不同
          $("p").replaceWith($("<div>new</div>"))
          $("<div>new</div>").replaceAll("p")
      

查找节点(父节点,子节点,兄弟节点 等等)

  • 原生
    • childNodes
      childNodes 返回的是子节点的集合,是一个数组的格式。他会把换行和空格也当成是节点信息。
    • children
    • firstChild
      • firstChild 浏览器解析的时候会把他当换行和空格一起解析,其实你获取的是第一个子节点,只是这个子节点是一个换行或者是一个空格而已
    • firstElementChild
    • lastChild 和firstChild有一样的问题
    • lastElementChild
    • parentNode (w3c的标准) parentElement (ie的标准)
    • offsetParent 获取所有的父节点
    • previousSiblingpreviousElementSibling 获取上一个兄弟节点
      previousSibling 会匹配字符,包括换行和空格,而不是节点。previousElementSibling则直接匹配节点。
    • nextSiblingnextElementSibling 获取下一个兄弟节点 不同点和上面类似
  • jquery 查找
    • jQuery.parent(selector) 获取父节点

    • jQuery.parents(selector) 获取祖先元素

    • jQuery.children(expr) 查找所有子元素,只会找到直接的孩子节点,不会返回所有子孙

    • jQuery.contents() 查找下面的所有内容,包括节点和文本。

    • jQuery.prevAll() 查找所有之前的兄弟节点

    • jQuery.next() 查找下一个兄弟节点,不是所有的兄弟节点

    • jQuery.prev() 查找上一个兄弟节点,不是所有的兄弟节点

    • jQuery.nextAll() 查找所有之后的兄弟节点

    • jQuery.siblings() 查找兄弟节点,不分前后

    • jQuery.find(expr)

        $("p").find("span")等于$("p span") 跟jQuery.filter(expr)完全不一样,jQuery.filter(expr)是从初始的   
      
    • jquery.filter() 将匹配元素集合缩减为匹配指定选择器的元素 // $("span").filter(":even") 或:odd

其他操作 属性及样式,文本操作

  • 原生
    • 元素的其他操作
      • element.id 设置或返回元素的 id。
      • element.className 设置或者 返回元素的类名
      • element.tagName 返回元素的标签名(大写)
      • element.style 设置或返回元素的样式属性,
      • element.clientHeight/clientWidth 返回内容的可视高度/宽度(不包括边框,边距或滚动条)
      • element.offsetHeight/offsetWidth /offsetLeft/offsetTop 返回元素的高度/宽度/相对于父元素的左偏移/右偏移(包括边框和填充,不包括边距)
      • element.scrollHeight/scrollWidth/scrollLeft/scrollTop 返回整个元素的高度(包括带滚动条的隐蔽的地方)/宽度/返回当前视图中的实际元素的左边缘和左边缘之间的距离/上边缘的距离
    • 文本操作
      • element.innerHTML 设置或者返回元素的内容,可包含节点中的子标签以及内容
      • **element.innerText ** 设置或者返回元素的内容,不包含节点中的子标签以及内容
      • element.value
    • 属性操作
      • element.createAttribute() 创建属性

      • element.setAttributeNode() 修改指定属性节点

      • element.setAttribute(attrName,attrValue) 把指定属性设置或更改为指定值

      • element.getAttribute(para) 返回元素节点的指定属性值

      • element.getAttributeNode(para) 返回指定的属性节点

      • element.attributes 返回所有的属性

      • node.hasAttributes()

      • element.hasAttribute(para) 如果元素拥有指定属性,则返回true,否则返回 false。

      • element.removeAttribute() 从元素中移除指定属性。

      • element.removeAttributeNode(attributenode) 方法用来删除指定的属性

  • jQuery
    • 属性操作
      • jQuery.attr("title") 获取title属性 attr("title","aaa") 设置属性
      • jQuery.removeAttr("title") 删除属性
    • 样式操作
      • jQuery.addClass() 添加类名
      • jQuery.removeClass() 移除类名
      • jQuery.hasClass() 判断是否存在某个类名
    • 文本操作
      • jQuery.html() 获取所有的内容,包括文本和子标签
      • jQuery.text() 只获取元素的纯文本内容
      • jQuery.val() 设置和获取元素的值

相关文章

  • DOM 节点的相应操作

    DOM的相关操作 什么是DOM DOM (document object model) 文档对象模型,是W3C 组...

  • DOM (javascript DOM节点操作)

    DOM (javascript DOM节点操作) 本节目录 查找DOM元素 DOM节点操作 javascript操...

  • Dom操作

    操作节点 获取节点 获取子节点 更新DOM innerHTMLinnerTEXT 插入DOM appendChil...

  • 05-DOM相关知识点讲解

    DOM DOM内容主要分为四部分: 什么是DOM和节点; 获取节点; 节点操作(3种); 属性操作(3种)。 什么...

  • JQuery---dom相关节点操作

    dom相关节点操作 /* DOM操作管理 属性...

  • 第十七章 DOM基础

    要点: DOM介绍 查找元素 DOM节点 节点操作 什么是 DOM? DOM即文档对象,针对HTML和XML文档的...

  • Vue解决了哪些问题

    虚拟 dom:dom 操作时非常耗性能的,不再使用原生的 dom 操作节点,极大的解放 dom 操作,但具体操作的...

  • DOM

    一.dom操作 dom的组成 元素节点属性节点文本节点 通过nodeType查看类型 1 元素节点 ,2 属性节...

  • DOM

    一、对象基础(补充) 二、DOM获取节点 三、间接获取节点 四、DOM节点的添加和删除 五、DOM属性操作 六、练...

  • DOM树知识点梳理

    1.HTML DOM2.获取节点的原生方法3.JS中的节点操作写几个常用的API, 来操作DOM节点。(1)doc...

网友评论

      本文标题:DOM 节点的相应操作

      本文链接:https://www.haomeiwen.com/subject/bsihuqtx.html