JQuery干货篇之插入元素

JQuery干货篇之插入元素

本次使用的html,css还是我上一篇的源代码,详情请看上一篇文章

分类

  1. 插入子元素:append,prepend ,appendTo,prependTo
  2. 封装包裹元素:wrap,wrapAll,wrapInner
  3. 插入兄弟元素:after,before,insertAfter,insertBefore
  4. 替换元素:replaceWith,replaceAll
  5. 删除元素:remove,deatch,unwrap,empty

创建新元素

通常在把新元素插入到DOM中的目标位置之前,要先创建一个新元素才能将它插入到指定位置

使用$创建元素

$(<div>![](rose.png)</div>)

clone

克隆元素,使用clone方法以已有的元素为模子生成新的元素,这个在后面的插入元素起到关键作用,如果在要引用html中的一个标签内容的话,不使用clone方法,那么就会将这段内容移动,因此这里使用clone会很方便,详细请看append的用法实例

实例:

    $("div.dcell").clone();    //这里的clone方法必须是JQuery对象调用

使用DOM API创建新元素

DOM API是用js操作的,其实jquery在幕后悄悄的调用DOM API

实例:

     var divElem=document.createElement("div");    //创建一个div元素
     divElem.classList.add("dcell");       //为div添加class=dcell

    var imgElem=document.createElement("img");
    imgElem.src="lily.png";

    divElem.appendChild(imgElem);   //在新创建的元素后面插入img

    var newElem=$(divElem);

    newElem.each(function (index,elem) {
        console.log(elem.tagName+"    "+elem.className);

    });

append

把参数指定的元素插入到所有的JQuery内含元素内容末尾成为他们的最后一个子元素,形式有append(html),append(Jquery),append(HTMLElements[])append(function())

实例:

//这里使用append元素创建了一个div元素,在末尾插入元素成为div的子元素
//
    var orchildElems = $("<div class='dcell'></div>").append("![](orchid.png)")
        .append("<label for='orchild'>Orchild:</label>")
        .append("<input name='orchild' value='0' required>");

    var newElems = $("<div class='dcell'></div>").append("![](lily.png)")
        .append("<label for='lily'>Lily:</label>")
        .append("<input name='lily' value='0' required>")
        .css("border", 'thick double red');
        
    $("div.drow").append(orchildElems);   //在末尾插入数据,这里的参数是jquery对象
    
    
    $("div.drow").append(function(index,elem){
    
    if(elem.id=='row1')
        return orchildElems;
    
    else if(this.id='row2')
        return newElems;
    })
    
    
    $("div.drow").last().append(orchildElem,newElems);   //在其中添加两个参数,插入的先后按照参数的先后位置,当然其中的参数个数没有限制
    
    
    
        

prepend

append完全相反,向当前元素的前面插入html节点作为当前元素的子元素,形式有prepen d(Jquery),prepend(html),prepend(htmlElemnts[]),prepend(function())

实例:

      var orchildElems = $("<div class='dcell'></div>").append("![](orchid.png)")
        .append("<label for='orchild'>Orchild:</label>")
        .append("<input name='orchild' value='0' required>");
    $("div.dcell").prepend(orchildElems);    //将orchildElems插入到div.dcell的最前面,作为他的子元素
    
    
    $("div.dcell").prepend("![](lily.png)"); //将参数html的内容插入到前面,作为子元素
    
    
    
    $("div.drow").append(function (index) {     //参数是函数,index是索引,返回的内容就是要插入到前面的内容

         if (this.id == 'row1')
             return orchildElem;                //返回的对象可以是jquery对象,也可以是html标签,如:return "![](lily.png)

         else if (this.id = 'row2')
             return newElems;
     });
    

appendTo

appendTo是和append一样的函数,都是将指定的元素插入到指定元素的前面作为子元素,但是他们的参数就不同了,append是将指定的参数插入到当前调用它的的结果集中,而appendTo是将当前调用它的结果集插入到指定的参数中,主要的形式有appendTo(jquery),append(HTMLELments[])

实例:


$("![](lily.png)").appendTo($("img").last().parent());   //将图片插入到最后一个dcell中,这里参数是目标位置,开头调用的时想要插入的内容

$("img:first").clone().appendTo($("img").last().parent()); //选择第一个图片插入到最后一个dcell中,这里必须用clone,否则就会将这张图片移到目标位置

 $($("div.dcell").html()).appendTo($("img").last().parent());   //这里的.html()是获取html文本内容

prependTo

.prepend().prependTo()实现同样的功能,主要的不同是语法,插入的内容和目标的位置不同。 对于 .prepend() 而言,选择器表达式写在方法的前面,作为待插入内容的容器,将要被插入的内容作为方法的参数。而 .prependTo() 正好相反,将要被插入的内容写在方法的前面,可以是选择器表达式或动态创建的标记,待插入内容的容器作为参数。

after

在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点。形式有after(content[content,]),after(function()),这里的content内容有HTML字符串,DOM 元素,文本节点,元素和文本节点的数组,或者jQuery对象,用来插入到集合中每个匹配元素的后面

实例:

      var orchildElems = $("<div class='dcell'></div>").append("![](orchid.png)")
        .append("<label for='orchild'>Orchild:</label>")
        .append("<input name='orchild' value='0' required>");     //创建一个dcell内容
        
    
        $("div.dcell").after(orchildElems);   //插入元素作为兄弟元素,在当前元素的后面
        
        
        $("#row1 div.dcell").after(function (index, html) {    //index表示索引,html表示原来的html文本,指的是没有插入之前的html
        console.log(html);
        if (index == 0)return orchildElem;        //返回的可以是jquery对象,html文本
        else if (index == 1)
            return newElems;
    });
});
        

before

根据参数设定,在匹配元素的前面插入内容,形式和after一样,内容也差不多

insertBefore

prependTo的用法差不多,只是参数是要插入的目标位置,作为兄弟元素插入

实例:

orchildElems.clone().insertBefore("#row2 div.dcell");

insertAfter

append用法差不多,只是参数是要插入的目标位置,这里的也是作为兄弟元素插入的

实例:

orchildElems.insertAfter("#row1 div.dcell");

wrap

在集合中匹配的每个元素周围包裹一个HTML结构,将会作为父元素存在。形式为wrap(html),wrap(jquery),wrap(HtmlElements[]),wrap(function())

实例:

    div=$("<div></div>").css("border",'thick double red');
    $("div.drow").wrap(div);     //在drow外层添加了一个div将作为父元素,可以看到现在的源代码变成了<div style...><div class='drow'>...</div></div>
    
    
    $(".drow").wrap(function (index) {   //index是索引
    //if($(this).has("img[src*=astor]").length>0)
    if(index==0)
        return div;      //只在第一个drow中添加父元素div
    else 
        return $("<div></div>").css("border",'thick double blue');
})

unwrap

将匹配元素集合的父级元素删除,保留自身(和兄弟元素,如果存在)在原来的位置。形式为unwrap(),unwrap(selector)

实例:

  $("div.dcell").css("border",'thick double red');
    $("div.dcell").children("img").first().unwrap();   //这里将第一个img元素的父级元素删除,并且保留了其中的子元素
    
    $("div.dcell").children("img").unwrap(":first");   //这里使用参数来筛选要删除父级元素的当前元素,这里选择第一个元素

wrapAll

在集合中所有匹配元素的外面包裹一个HTML结构,也就是为结果集中的所有元素都设置了一个相同的父级元素来包裹所有的元素,形式为wrapAll(html),wrapAll(jquery),wrapAll(htmlElements[]),wrapAll(function())

实例:

var div = $("<div></div>").css("border", 'thick double red');
$("div.drow").wrapAll(div);    //这里的div成为了他共有的父级元素,原来的父级元素变成了祖先元素了
$("img").wrapAll(div);  //这里的img没有共同的父元素,那么就会强制的将所有的元素拉在一起为他们设置一个父级元素



wrapInner

在匹配元素里的内容外包一层结构,也就是为匹配元素的后代元素添加一个父级元素,但是这个父级元素是匹配元素的子代元素,也就是原来的匹配元素变成了祖先元素,形式为wrapInner(html),wrapInner(jquery),wrapInner(htmlElements),wrapInner(function())

实例:

    var div = $("<div></div>").css("border", 'thick double red');
    $(".dcell").wrapInner(div);    //这里的dcell元素将会变成祖先元素,而div将会变成内部后代元素新的父级元素

replaceWith

用提供的内容替换集合中所有匹配的元素并且返回被删除元素的集合,形式为replace(html),replaceWith(jquery),replaceWith(function())

实例:

 var newElems = $("<div class='dcell'></div>").append("![](lily.png)")
 .append("<label for='lily'>Lily</label>").append("<input name='lily' value='0' required>").css("border", 'thick   double blue');
$(".dcell:first").replaceWith(newElems);  //用newElems替换第一个dcell


$("div.drow img").replaceWith(function () {
    if (this.src.indexOf("rose") > -1)
        return $("![](lily.png)").css("border",'thick double red'); //返回的时替换的内容,可以是jquery或者html
    else if (this.src.indexOf("peony") > -1)
        return newElems;
    else return $(this.clone()).css("border",'thick double blue');

})

replaceAll

用集合的匹配元素替换每个目标元素。.replaceAll().replaceWith()功能类似,但是目标和源相反

实例:

 $("![](lily.png)").replaceAll("#row1 img");   //这里使用![](lily.png)替换所有的img元素

remove

将匹配元素集合从DOM中删除,并且同时移除元素上的事件及 jQuery 数据

实例:

$("div.dcell").remove(":has(img[src*=rose])");  //删除img

$("div.dcell:first()").remove();    //不带参数


detach

DOM中去掉所有匹配的元素,.detach() 方法和.remove()一样, 除了 .detach()保存所有jQuery数据和被移走的元素相关联。当需要移走一个元素,不久又将该元素插入DOM时,这种方法很有用。

实例:

$("div.dcell").detach();

$("div.dcell").detach(":has(img[src*=rose])"); 

empty

DOM中移除集合中匹配元素的所有子节点。

$("div.dcell:first").empty();   //删除所有的子节点

参考文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容

  • DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作。但实际上...
    阿r阿r阅读 986评论 0 9
  • 第1章 简介 第2章 DOM节点的创建 2-1 DOM创建节点及节点属性 通过JavaScript可以很方便的获...
    mo默22阅读 772评论 0 8
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,276评论 0 44
  • 1:jQuery节点创建与属性的处理 创建元素节点:可以有几种方式,后面会慢慢接触。常见的就是直接把这个节点的结构...
    码农小杨阅读 569评论 0 1
  • http://www.imooc.com/static/lib/jquery/1.9.1/jquery.js js...
    再见理想冷雨夜阅读 446评论 0 1