(七)jQuery中的DOM操作

一、jQuery的DOM操作

(1)查找节点:  

      查找元素节点:

  1. 获取指定的标签节点 $(“上级标签 标签:eq(“标签索引”) ;  如:var li = $("ul li:eq(2)");

      2. 获取标签节点$(“标签”)     

  3. 获取标签节点文本text()

  查找属性节点:

  利用attr()方法来获取它的各种属性的值。Attr()里的参数是一个时:是要查询的属性的名称,也可以是两个。    

  1. 获取标签节点       

  2. 获取标签节点属性:方法attr()     

(2)创建节点:  

  创建元素节点:    var li = $("<li>创建了一个li标签节点</li>");

 注意:(1)动态创建的新元素节点不会被自动添加到文档中,而是需要使用其他方法将其插入文档中(需要append()方法)。   

   (2)当创建单个元素时,要注意闭合标签和使用标准的XHTML格式。  

 创建文本节点:      var li = $("<li>创建了一个li标签节点</li>");

     创建文本节点就是在创建元素节点时直接把文本内容写出来,然后用append()添加到文档中。

   创建属性节点:      var li = $("<li  class='tag' >创建了一个li标签节点</li>");

   创建属性节点与创建文本节点类似,也是在创建元素节点时一起创建。

(3)插入节点:     

方法如下: 

    方法                       描述                                                

      append()                在每个匹配的元素的内部追加内容    

如:    var li = $("<li>创建了一个li标签节点,且append到ul表面里 </li>");      $("ul).append(li);   //将li追加ul里

      appendTo()               将所有匹配的元素追加到指定的元素中   

如:    var li = $("<li>创建了一个li标签节点,且append到ul表面里 </li>");      li.appendTo(ul);   //将li追加到ul里

    prepend()            向每个匹配的元素内部前置内容

       prependTo()            将所有匹配的元素前置到指定的元素中  

    after()                   在每个匹配的元素之后插入内容

       insertAfter()            将所有匹配的元素之后插入到指定元素的后面  

    before()                   在每个匹配的元素之前插入内容 

      insertBefore()          将所有匹配的元素插入到指定的元素的前面  

(4)删除节点:   

    方法1:

        remove();  使用remove()方法删除后,该节点所包含的所有后代节点将同时被删除,该方法的返回值是一个指向已被删除的节点的引用,因此可以在以后再使用这些元素(如下案例)。

   如: $("ul li:eq(2)").remove();  //获取第三个<li>元素节点后,将它从网页中删除

<body>
        <ul>
            <li>1111111</li>
            <li>
                222222
                <span>2-111111</span>
            </li>
            <li>333333</li>
            <li>44444</li>
        </ul>
        
        <script src="js/jquery/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">

        setTimeout(function(){
            var li=$("ul li:eq(1)").remove();   //获取第二个<li>元素节点后,将它从网页中删除
            li.appendTo("ul");          //把刚才删除的节点有重新添加到<ul>元素里
        },2000);
        
        </script>
    </body>

 方法2(很重要哦!):

  detach(); 和romove();方法一样,也是从DOM中去掉所有匹配的元素。但需要注意的是,这个方法不会把匹配的元素从jQuery中删除,因而可以在将来再使用这些匹配的元素。与romove();不同的是,所有绑定的事件、附加的数据都会保存下来。

<body>
        <ul>
            <li>1111111</li>
            <li>
                222222
                <span>2-111111</span>
            </li>
            <li>333333</li>
            <li>44444</li>
        </ul>
        <script src="js/jquery/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">
//            $(function(){
//                $("ul li:eq(1)").unbind().bind('click',function(){
//                    console.log("还没执行remove()之前,执行的点击事件");
//                    alert("还没执行remove()之前,执行的点击事件");
//                });
//                //延时5000ms后执行remove();之后再把li添加到ul里
//                setTimeout(function(){
//                    var li=$("ul li:eq(1)").remove();   //删除元素
//                    ul.append("li");                   //之前绑定的click事件消失
//                    
//                    console.log("执行remove()之后,相应的事件也被移除了!");
//                    alert("执行remove()之后,相应的事件也被移除了!");
//                },5000);
//                
//            });
            
            $(function(){
                $("ul li:eq(1)").unbind().bind('click',function(){
                    console.log("还没执行detach()之前,执行的点击事件");
                    alert("还没执行detach()之前,执行的点击事件");
                });
                //延时5000ms后执行detach();之后再把li添加到ul里
                setTimeout(function(){
                    li=$("ul li:eq(1)").detach();   //删除元素
                    li.appendTo("ul");            //重新最佳此元素,它之前绑定的事件还在。如果使用remove();方法删除元素的话,那么它之前绑定的事件将消失。
                    //等价于:$("ul").append(li);

console.log(
"执行detach()之后,相应的事件没有被移除!点击事件还可以执行"); alert("执行detach()之后,相应的事件没有被移除!点击事件还可以执行"); },5000); }); </script> </body>

 方法3:

      empty(); 方法并不是删除节点,而是清空节点,它能清空元素中的所有后代节点。 

  如: $("ul li:eq(2)").empty();  //获取第三个<li>元素节点后,清除此元素里的内容。注意是元素里。 

(5)复制节点:

            复制节点也是常用的DOM操作之一,在clone()方法中传播了一个参数true,它的含义是复制元素的同时复制元素中所绑定的事件。

    $("ul li").bind('click',function(){  
         ul= $("ul");
      $(this).clone().appendTo(ul);    //复制当前点击的节点(只能是原先页面有的li,生成的li不能点击),并追加到<ul>元素中 --------->被复制的新元素不具备任何行为!
      //要想实现点击生成的li也具有点击的功能,那么需要添加参数true。它的含义是复制元素的同时复制元素的中所绑定的事件。如下:
      //
$(this).clone(true).appendTo(ul); //此时被复制的新元素也具有相应的行为
   });

 (6)替换节点:   

   方法1:

         replaceWith()方法的作用是将所有匹配的元素都替换成指定的HTML 或者 DOM元素.  

   方法2:

        replaceAll()方法与replaceWith()方法的作用相同,只是颠倒了replaceWith()操作。  

        注意:如果在替换之前,已经为元素绑定事件,替换后原先绑定的事件将会与被替换的元素一起消失,需要在新元素上重新绑定事件。

<body>
        <div class="rep">divdivdivdivdiv</div>
        <p class="pp1">pppppppppp</p>
        <p class="pp2">pppppppppp</p>
        <script src="js/jquery/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">
            $(function(){
                $(".pp1").replaceWith("<b class='bb'>bbbbbbbbbbbb</b><br />");
                $('<i class="ii">iiiiiiiiiiiiii</i>').replaceAll('.pp2');
            });
        </script>
    </body>

 效果:

(7)包裹节点:

     包裹节点将某一个节点用其他标记包裹起来.  

     方法1:   wrap()是将所有的元素进行单独的包裹(将匹配的元素逐个进行包裹).   

     方法2:   wrapAll()方法是将所有匹配的元素用一个元素来包裹.  

     方法3    wrapInner()方法是将每一个匹配的元素的子内容【包括文本节点】用其他结构化的标记包裹起来(是包裹匹配元素的文本).           

         注释:wrapAll()与wrapInner()两者的区别在于:前者是将所有匹配元素用一个元素来包裹,后者是将每一匹配的子内容用其他元素标记起来.

<body>
        <div class="rep">divdivdivdivdiv</div>
        <div class="rep">divdivdivdivdiv</div>
        <script src="js/jquery/jquery-1.11.3.min.js"></script>
        <script type="text/javascript">
            $(function(){
                //wrap() 将所有的元素进行单独包裹
                //$(".rep").wrap("<section class='sec'></section>");
                
                //wrapAll() 将所有匹配的元素用一个元素来包裹
                //$(".rep").wrapAll("<section class='sec'></section>");
                
                //warpInner()  将每一个匹配的元素的子内容(包括文本节点)用其他结构化的标记包裹起来。
                $(".rep").wrapInner("<section class='sec'></section>");
                
            });
        </script>
    </body>

 执行:$(".rep").wrap("<section class='sec'></section>");后的效果:

执行:$(".rep").wrapAll("<section class='sec'></section>");后的效果:

执行:$(".rep").wrapInner("<section class='sec'></section>");后的效果:

(8)属性操作:     参考之前的文章

       1、获取属性设置属性: (获取元素属性的值和设置元素属性的值。类似的还有html()、text()、height()、width()、val()、css() );

         attr()获取或设置属性,如果要获取某一元素的某一属性,只需要给attr()方法传递一个属性参数即可。    

       2、删除属性:  ( 例如: $("p").removeAttr(".title");   //删除p标签的title属性  )

         removeAtte(),在某些情况下,需要删除文档中的某个元素的特点属性,使用removeAfter()方法。

(9)样式操作:   

     1、获取样式和设置样式:  

              attr()方法,用于获取标签元素的属性,也可以用于设置标签元素的属性值,是将原来的属性替换为新的属性,而不是追加。当然你也可以同时设置两个class,如:$("p").attr("class","class1 class2");

     2、追加样式:   

             在jQuary中,使用addClass()方法追加样式,如果给一个元素添加了多个Class值,那么就相当于合并了他们的样式.如果有不同的class设定了同一样式属性,则后者覆盖前者。  

     3、移除样式:

             removeClass()方法与addClass()方法相反,可以从匹配的元素中删除全部或者指定的class.    

     4、切换样式:   

            jQuery提供了一个toggleClass()方法控制样式上的重复切换。如果类名存在则删除它,如果类名不存在则添加它。   

   5、切换样式:

         jQuery提供了一个toggle()方法 控制样式上的重复切换。如果原来是显示的则隐藏,如果原来是影藏的则显示。

    <body>
        <button>点我换背景色</button>
        <script src="js/jquery/jquery-1.8.3.min.js"></script>
        <script type="text/javascript">
        $(function(){
            $("button").toggle(function(){
                $("body").css("background-color","green");
                },function(){
                    $("body").css("background-color","red");
                },function(){
                       $("body").css("background-color","yellow");
                }
            );
        });
        </script>
    </body>

      6、判断是否含有某个样式:  

            hasClass();   用来判断元素是否含有某个class,如果有,则返回true,否则返回false.   可以用来作为判断条件,如果存在某class则执行语句1否则执行语句2;

(10)设置和获取HTML,文本和值   获取HTML:    

    html()方法获取,此方法类似于Javascript中的innerHTML属性,可以用来读取或者设置某个元素中的HTML内容.   文本值:  

           text()方法设置文本的值,此方法类似于Javascript中的innerText属性,可以用来读取或者设置某个元素中的文本元素。   

          获取值:    val()方法获取值,此方法类似于JavaScript中的value属性,可以用来设置和获取元素的值,无论元素是文本框、下拉列表还是单选框,它都可以返回元素的值,如果元素为多选,则返回一个包含所有选择的值的数组.

           注释:Html()、text()、val()区别:

                          (1)html:取得第一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档,返回的是一个String 。

                          (2)设置每一个匹配元素的html内容。这个函数不能用于XML文档。但可以用于XHTML文档。返回一个jquery对象.  

                          (3)text:取得所有匹配元素的内容。结果是由所有匹配元素包含的文本内容组合起来的文本。返回的是一个String.

                          (4)val: 获得第一个匹配元素的当前值.   

<body>
        <div class="a">aaaaaaaaaa<strong>ssssssssss</strong></div>
        <p class="b">bbbbbbbbbbbb<strong>ssssssssss</strong></p>
        <input class="e" type="text" name="name" value="mmmmmmmm" />
        <script src="js/jquery/jquery-1.8.3.min.js"></script>
        <script type="text/javascript">
        $(function(){
            var a = $(".a").html();
            console.log(a);
            
            var b = $(".b").text();
            console.log(b);
            
            var e = $(".e").val();
            console.log(e);
        });
        
        </script>
    </body>

效果:

 更多相关内容:http://www.cnblogs.com/mcad/p/4357467.html

   (11)遍历循环   

           children()方法  用于取得匹配元素的子元素集合。注释:children()方法只考虑子元素而不考虑任何后代元素。         

           next()方法  用于取得元素后面紧邻的同辈元素(只有一个).   

           prev()方法  用于取得元素前面紧邻的同辈元素(只有一个).   

           siblings()方法  用于取得匹配元素前后所有的同辈元素.

           closest()方法   用来取得最近的匹配元素。首先检查当前元素是否匹配,如果匹配则直接返回元素本身。如果不匹配则向上查找父元素,逐级向上直到找到匹配选择器的元素如果什么都没找到则返回一个空的jQuery对象.

           其它遍历循环的方法:  

            find(),搜索所有与指定表达式匹配的元素.   

            filter(),筛选出与指定表达式匹配的元素集合. 

            not(),删除与指定表达式匹配的元素.  

            add(),把与表达式匹配的元素添加到jQuery对象中.这个函数可以用于连接分别与两个表达式匹配的元素结果集.  

            Slice(),选取一个与表达式匹配的子集. 

            nextAll(),选择一个元素后面所有的兄弟节点.

            prevAll(),选择一个元素前面所有的兄弟节点.

            parent(),取一个包含着所有匹配元素span的唯一父元素的元素集合 .  

            parents(),取一个包含着所有匹配元素span的祖先元素的元素集合(不包含根元素).  

           注意:这些遍历DOM方法有一个共同点,都可以使用jQuery表达式作为它们的参数来筛选元素。

 

二、CSS DOM操作   (样式获取或设置)  

           (1).CSS()方法,用css()方法获取元素的样式属性.   

                    注意:无论color属性是外部CSS导入,还是直接拼接在HTML元素里(内联),css()方法都可以获取到属性style里的其他属性的值,也可以直接利用css()方法设置某个元素的单个样式.   

                   作用:1.获取元素的样式属性       

                          2.属性style里的其他属性的值   

                          3.设置某个元素的单个样式     

                          4.可以同时设置多个样式属性    

          (2)设置透明度的属性:opacity;         $("i").css({"background":"#000", "color":"white", "opacity":"1.0"});  //设置多个属性

          (3).获取某个元素的高度的方法height(),还有获取某个元素的height属性。         

                   作用:height():取得匹配元素当前计算的高度值(px)      

           $("p").height();  //获取p元素的高   

           $("p").height(“100px”);  //设置p元素的高   

          (4)css()方法与height()方法的区别:  

                         css():获取的高度值与样式的设置有关,可能会得到"auto",也可能得到"10px"之类的字符串.  

                         height():获取的高度值则是元素在页面中的实际高度,与样式的设置无关,并且不带单位.          

                         与height()方法对应的还有一个width()方法,它也可以取得匹配元素的宽度值(px)用法和height()一样.     

          (5)offset():获取元素在当前视窗的相对偏移,其中返回的对象包含两个属性(top和left),它只对可见元素有效.    

                  作用:offset():获取元素在当前视窗的相对偏移.    

          (6)position():获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对偏移,与offset()一样,它返回的对象也包括两个属性(top和left).                  作用:position():

                 获取元素相对于最近的一个position样式属性设置为relative或者absolute的祖父节点的相对偏移.   

         (7)scrollTop()方法和scrollLeft()方法:这两个方法的作用分别是获取元素的滚动条距顶端的距离和距左侧的距离    

                 作用:这两个方法的作用分别是获取元素的滚动条距顶端的距离和距左侧的距离.   

原文地址:https://www.cnblogs.com/xiangru0921/p/6524450.html