zoukankan      html  css  js  c++  java
  • DOM节点属性

    节点属性

    在文档对象模型 (DOM) 中,每个节点都是一个对象。DOM 节点有三个重要的属性 :

    1. nodeName : 节点的名称

    2. nodeValue :节点的值

    3. nodeType :节点的类型

    一、nodeName 属性: 节点的名称,是只读的。

    1. 元素节点的 nodeName 与标签名相同
    2. 属性节点的 nodeName 是属性的名称
    3. 文本节点的 nodeName 永远是 #text
    4. 文档节点的 nodeName 永远是 #document

    二、nodeValue 属性:节点的值

    1. 元素节点的 nodeValue 是 undefined 或 null
    2. 文本节点的 nodeValue 是文本自身
    3. 属性节点的 nodeValue 是属性的值

    三、nodeType 属性: 节点的类型,是只读的。以下常用的几种结点类型:

    元素类型    节点类型
      元素          1
      属性          2
      文本          3
      注释          8
      文档          9

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>节点属性</title>
    </head>
    <body>
      <ul>
         <li>javascript</li>
         <li>HTML/CSS</li>
         <li>jQuery</li>     
      </ul>
      <script type="text/javascript">
        var node=document.getElementsByTagName("li");
        for(var i=0;i<node.length;i++){
          document.write("li["+(i+1)+"]:"+"<br/>"+"节点名:"+node[i].nodeName+"<br/>");
          document.write("节点值:"+node[i].nodeValue+"<br/>");
          document.write("节点类型:"+node[i].nodeType+"<br/><br/>");
            }
    /*

    var lists = document.getElementsByTagName("li");
    for(var i=0;i<lists.length;i++)
    {
    document.write("第"+i+"个节点的名称是"+lists[i].nodeName+"<br />");
    document.write("第"+i+"个节点的值是"+lists[i].nodeValue+"<br />");
    document.write("第"+i+"个节点的类型是"+lists[i].nodeType+"<br />");
    document.write("<br />");
    }*/

    /*

    var myli = document.getElementsByTagName("li");
    for(var i=0;i<myli.length;i++){
    var myname=myli[i].nodeName;
    var myvalue=myli[i].nodeValue;
    var mytype=myli[i].nodeType;
    document.write(myname+"<br />");
    document.write(myvalue+"<br />");

    document.write(mytype+"<br />");

    }*/

    </script>
    </body>
    </html>

    访问子结点childNodes

    访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性。

    语法:

    elementNode.childNodes

    注意:

    如果选定的节点没有子节点,则该属性返回不包含节点的 NodeList。

    我们来看看下面的代码:

    运行结果:

    IE:

      UL子节点个数:3
      节点类型:1

    其它浏览器:

       UL子节点个数:7
       节点类型:3

    注意:

    1. IE全系列、firefox、chrome、opera、safari兼容问题

    2. 节点之间的空白符,在firefox、chrome、opera、safari浏览器是文本节点,所以IE是3,其它浏览器是7,如下图所示:

    如果把代码改成这样:

    <ul><li>javascript</li><li>jQuery</li><li>PHP</li></ul>

    运行结果:(IE和其它浏览器结果是一样的)

      UL子节点个数:3
      节点类型:1
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    <div>
      javascript  
      <p>javascript</p>
      <div>jQuery</div>
      <h5>PHP</h5>
    </div>
    <script type="text/javascript">
     var x=document.getElementsByTagName("div")[0].childNodes;
     for(var i=0;i<x.length;i++)
     {
        document.write(""+(i+1)+"个节点的值是:"+x[i].nodeValue+"<br  />"); 
        document.write(""+(i+1)+"个节点的名称是:"+x[i].nodeName+"<br  />"); 
        document.write(""+(i+1)+"个节点的属性是:"+x[i].nodeType+"<br  />");
        document.write("<br  />");
     }
    </script>
    </body>
    </html>
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    <div>
      javascript  
      <p>javascript</p>
      <div>111</div>
      <h5>PHP</h5>
    </div>
    <div>
      哈哈哈  
      <p>javascript</p>
      <div>
        <div>444</div>
        <div>333111</div>
       <div>333111222</div>
         <h5>PHP</h5>
      </div>
      <h5>PHP</h5>
    </div>
    <div>
      哼哼  
      <p>javascript</p>
      <div>555</div>
      <h5>PHP</h5>
    </div>
    <script type="text/javascript">
     var x=document.getElementsByTagName("div")[4].childNodes;
     for(var i=0;i<x.length;i++)
     {
        document.write(""+(i+1)+"个节点的值是:"+x[i].nodeValue+"<br  />"); 
        document.write(""+(i+1)+"个节点的名称是:"+x[i].nodeName+"<br  />"); 
        document.write(""+(i+1)+"个节点的属性是:"+x[i].nodeType+"<br  />");
        document.write("<br  />");
     }
    </script>
    </body>
    </html>

    访问子结点的第一和最后项

    一、firstChild 属性返回‘childNodes’数组的第一个子节点。如果选定的节点没有子节点,则该属性返回 NULL。

    语法:

    node.firstChild

    说明:与elementNode.childNodes[0]是同样的效果。 

    二、 lastChild 属性返回‘childNodes’数组的最后一个子节点。如果选定的节点没有子节点,则该属性返回 NULL。

    语法:

    node.lastChild

    说明:与elementNode.childNodes[elementNode.childNodes.length-1]是同样的效果。 

    注意: 上一节中,我们知道Internet Explorer 会忽略节点之间生成的空白文本节点,而其它浏览器不会。我们可以通过检测节点类型,过滤子节点。 (以后章节讲解)

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    <div id="con"><p>javascript</p>
      <div>jQuery</div>
      <h5>PHP</h5>
    </div>
    <script type="text/javascript">
      var x=document.getElementById("con");
      
    document.write(x.firstChild.nodeName+" "+x.firstChild.nodeValue+" "+x.firstChild.nodeType+"<br/>");
     document.write(x.lastChild.nodeName+" "+x.firstChild.nodeValue+" "+x.firstChild.nodeType);
    
    </script>
    </body>
    </html>

    访问父节点parentNode

    获取指定节点的父节点

    语法:

    elementNode.parentNode

    注意:父节点只能有一个。

    看看下面的例子,获取 P 节点的父节点,代码如下:

    <div id="text">
      <p id="con"> parentNode 获取指点节点的父节点</p>
    </div> 
    <script type="text/javascript">
      var mynode= document.getElementById("con");
      document.write(mynode.parentNode.nodeName);
    </script>

    运行结果:

    parentNode 获取指点节点的父节点
    DIV

    访问祖节点:

    elementNode.parentNode.parentNode

    看看下面的代码:

    <div id="text">  
      <p>
        parentNode      
        <span id="con"> 获取指点节点的父节点</span>
      </p>
    </div> 
    <script type="text/javascript">
      var mynode= document.getElementById("con");
      document.write(mynode.parentNode.parentNode.nodeName);
    </script>

    运行结果:

    parentNode获取指点节点的父节点
    DIV

    注意: 浏览器兼容问题,chrome、firefox等浏览器标签之间的空白也算是一个文本节点。

    <!DOCTYPE HTML>
    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>无标题文档</title>
    </head>
    
    <body>
        <ul id="con">
            <li id="lesson1">javascript
                <ul>
                    <li id="tcon"> 基础语法</li>
                    <li>流程控制语句</li>
                    <li>函数</li>
                    <li>事件</li>
                    <li>DOM</li>
                </ul>
            </li>
            <li id="lesson2">das</li>
            <li id="lesson3">dadf</li>
            <li id="lesson4">HTML/CSS
                <ul>
                    <li>文字</li>
                    <li>段落</li>
                    <li>表单</li>
                    <li>表格</li>
                </ul>
            </li></ul>
        <script type="text/javascript">
        var mylist = document.getElementById("tcon");
        var myul = mylist.parentNode.parentNode.parentNode;
        document.write(myul.lastChild.innerHTML);
        /*var mylist = document.getElementById("lesson4");
        document.write(mylist.innerHTML);*/
        </script>
    </body>
    
    </html>

    访问兄弟节点

    1. nextSibling 属性可返回某个节点之后紧跟的节点(处于同一树层级中)。

    语法:

    nodeObject.nextSibling

    说明:如果无此节点,则该属性返回 null。

    2. previousSibling 属性可返回某个节点之前紧跟的节点(处于同一树层级中)。

    语法:

    nodeObject.previousSibling  

    说明:如果无此节点,则该属性返回 null。

    注意: 两个属性获取的是节点。Internet Explorer 会忽略节点间生成的空白文本节点(例如,换行符号),而其它浏览器不会忽略。

    解决问题方法:

    判断节点nodeType是否为1, 如是为元素节点,跳过。

    运行结果:

    LI = javascript
    nextsibling: LI = jquery
    <!DOCTYPE HTML>
    <html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <title>nextSibling</title>
    </head>
    
    <body>
        <ul id="u1">
            <li id="a">javascript</li>
            <li id="b">jquery</li>
            <li id="c">html</li>
        </ul>
        <ul id="u2">
            <li id="d">css3</li>
            <li id="e">php</li>
            <li id="f">java</li>
        </ul>
        <script type="text/javascript">
        function get_nextSibling(n) {
            var x = n.nextSibling;
            while (x && x.nodeType != 1) {
                x = x.nextSibling;
            }
            return x;
        }
    
        var x = document.getElementsByTagName("li")[0];
        document.write(x.nodeName);
        document.write(" = ");
        document.write(x.innerHTML);
    
        var y = get_nextSibling(x);
    
        if (y != null) {
            document.write("<br />nextsibling: ");
            document.write(y.nodeName);
            document.write(" = ");
            document.write(y.innerHTML);
        } else {
            document.write("<br>已经是最后一个节点");
        }
        </script>
    </body>
    
    </html>
    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>nextSibling</title>
    </head>
    <body>
    <ul id="u1">   
                <li id="a">javascript</li>   
                <li id="b">jquery</li>   
                <li id="c">html</li>   
            </ul>   
            <ul id="u2">   
                <li id="d">css3</li>   
                <li id="e">php</li>   
                <li id="f">java</li>   
            </ul>   
    <script type="text/javascript">
        function get_previousSibling(n){
            var x = n.previousSibling;
            while(x && x.nodeType != 1){
                x = x.previousSibling
            }
            return x;
        }
    
        var x = document.getElementsByTagName("li")[1];
        var y = get_previousSibling(x);
        if(y != null){
            document.write(x.nodeName+"="+x.innerHTML);
            document.write("<br />"+y.nodeName+"="+y.innerHTML);
        }else{
            document.write("<br />这已经是第一个节点了!")
        }
    
    </script>
    </body>
    </html>

    插入节点appendChild()

    在指定节点的最后一个子节点列表之后添加一个新的子节点。

    语法:

    appendChild(newnode)

    参数:

    newnode:指定追加的节点。

    我们来看看,div标签内创建一个新的 P 标签,代码如下:

    运行结果:

    HTML
    JavaScript
    This is a new p

    插入节点insertBefore()

    insertBefore() 方法可在已有的子节点前插入一个新的子节点。

    语法:

    insertBefore(newnode,node);

    参数:

    newnode: 要插入的新节点。

    node: 指定此节点前插入节点。

    我们在来看看下面代码,在指定节点前插入节点。

    运行结果:

    This is a new p
    JavaScript
    HTML

    注意: otest.insertBefore(newnode,node); 也可以改为:  otest.insertBefore(newnode,otest.childNodes[0]); 

    删除节点removeChild()

    removeChild() 方法从子节点列表中删除某个节点。如删除成功,此方法可返回被删除的节点,如失败,则返回 NULL。

    语法:

    nodeObject.removeChild(node)

    参数:

    node :必需,指定需要删除的节点。

    我们来看看下面代码,删除子点。

    运行结果:

    HTML
    删除节点的内容: javascript

    注意: 把删除的子节点赋值给 x,这个子节点不在DOM树中,但是还存在内存中,可通过 x 操作。

    如果要完全删除对象,给 x 赋 null 值,代码如下:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    
    <body>
    <div id="content">
      <h1>html</h1>
      <h1>php</h1>
      <h1>javascript</h1>
      <h1>jquery</h1>
      <h1>java</h1>
    </div>
    
    <script type="text/javascript">
    function clearText() {
      var content=document.getElementById("content");
      // 在此完成该函数 
      var x = content.childNodes;
    
        //方法一,一次性删除节点 这个方法应该是最严谨最好的
      /*for(var i=0; i<x.length;i++){
          if(x[i].nodeType != 1){
              continue;
          }else{
              content.removeChild(x[i]);
          }
      }*/
    
    
    //方法二,一次性清除节点简单版 也可以
      /*for(var i = x.length-1;i<x.length;i--){
          content.removeChild(x[i]);
      }*/
    
    
      //方法三,一个个清除 这个方法不够严谨,需要点击多次
      for(var i = 0;i<x.length;i++){
          content.removeChild(x[0]);
      }
    
    
    }
    </script>
    
    <button onclick="clearText()">清除节点内容</button>
    
    
    
    </body>
    </html>

    替换元素节点replaceChild()

    replaceChild 实现子节点(对象)的替换。返回被替换对象的引用。 

    语法:

    node.replaceChild (newnode,oldnew ) 

    参数:

    newnode : 必需,用于替换 oldnew 的对象。 
    oldnew : 必需,被 newnode 替换的对象。

    我们来看看下面的代码:

     

    效果: 将文档中的 Java 改为 JavaScript。

    注意: 

    1. 当 oldnode 被替换时,所有与之相关的属性内容都将被移除。 

    2. newnode 必须先被建立。

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    
    
      <div><b id="oldnode">JavaScript</b>是一个很常用的技术,为网页添加动态效果。</div>
      <!--<a href="javascript:replaceMessage()"> 将加粗改为斜体</a>-->
      <a href="javascript:replaceMessage()">11</a>
        <script type="text/javascript">
          function replaceMessage(){
              var newnode = document.createElement("i");
              //var newnodeText = document.createTextNode("JavaScript");
              //newnode.appendChild(newnodeText);
           //newnode.innerHTML = "JavaScript";
              var oldnode = document.getElementById("oldnode");
              newnode.innerHTML = oldnode.innerHTML;
              oldnode.parentNode.replaceChild(newnode,oldnode);
               
           }    
      </script>
      
     </body>
    </html>

    HTML DOM setAttribute() 方法

    实例

    设置 input 元素的 type 属性:

    document.getElementsByTagName("INPUT")[0].setAttribute("type","button");

    设置该属性之前:

    设置该属性之后:

    亲自试一试

    定义和用法

    setAttribute() 方法添加指定的属性,并为其赋指定的值。

    如果这个指定的属性已存在,则仅设置/更改值。

    浏览器支持

    IEFirefoxChromeSafariOpera
             

    所有主流浏览器均支持 setAttribute() 方法。

    注释:Internet Explorer 8 以及更早的版本不支持此方法。

    语法

    element.setAttribute(attributename,attributevalue)

    参数

    参数类型描述
    attributename String 必需。您希望添加的属性的名称。
    attributevalue String 必需。您希望添加的属性值。

    创建元素节点createElement

    createElement()方法可创建元素节点。此方法可返回一个 Element 对象。

    语法:

    document.createElement(tagName)

    参数:

    tagName:字符串值,这个字符串用来指明创建元素的类型。

    注意:要与appendChild() 或 insertBefore()方法联合使用,将元素显示在页面中。

    我们来创建一个按钮,代码如下:

    <script type="text/javascript">
       var body = document.body; 
       var input = document.createElement("input");  
       input.type = "button";  
       input.value = "创建一个按钮";  
       body.appendChild(input);  
     </script>  

    效果:在HTML文档中,创建一个按钮。

    我们也可以使用setAttribute来设置属性,代码如下:

    <script type="text/javascript">  
       var body= document.body;             
       var btn = document.createElement("input");  
       btn.setAttribute("type", "text");  
       btn.setAttribute("name", "q");  
       btn.setAttribute("value", "使用setAttribute");  
       btn.setAttribute("onclick", "javascript:alert('This is a text!');");       
       body.appendChild(btn);  
    </script>  

    效果:在HTML文档中,创建一个文本框,使用setAttribute设置属性值。 当点击这个文本框时,会弹出对话框“This is a text!”。

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>无标题文档</title>
    </head>
    <body>
    <script type="text/javascript">
    var main = document.body;
    //创建链接
    function createa(url,text){
        var alink = document.createElement("a");
        alink.setAttribute("href",url);
        alink.innerHTML = text;
        alink.style.color = "red";
        main.appendChild(alink);
        //alink.setAttribute("innerHTML",text);这种方法也行不通!
        //text = alink.innerHTML;这种方法也行不通啊!
    return alink;
        
    }
    // 调用函数创建链接
    //main.appendChild(createa("http://www.imooc.com","Mukewang"));
        createa("http://www.imooc.com","慕课网");
    </script> 
    </body>
    </html>

     

    创建文本节点createTextNode

    createTextNode() 方法创建新的文本节点,返回新创建的 Text 节点。

    语法:

    document.createTextNode(data)

    参数:

    data : 字符串值,可规定此节点的文本。

    我们来创建一个<div>元素并向其中添加一条消息,代码如下:

    运行结果:

  • 相关阅读:
    14.4.9 Configuring Spin Lock Polling 配置Spin lock 轮询:
    14.4.8 Configuring the InnoDB Master Thread IO Rate 配置InnoDB Master Thread I/O Rate
    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.6 Configuring Thread Concurrency for InnoDB 配置Thread 并发
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
    14.4.4 Configuring the Memory Allocator for InnoDB InnoDB 配置内存分配器
  • 原文地址:https://www.cnblogs.com/iceflorence/p/6062644.html
Copyright © 2011-2022 走看看