章节
问答
课签
笔记
评论
占位
占位

节点操作

jQuery对节点的操作封装出了一系列的接口,可以接受HTML字符串、DOM 元素、元素数组、或者jQuery对象,用来插在集合中每个匹配元素的不同位置

HTML结构:

$('.inner').after('<p>Test</p>');

$对象:

$('.container').after($('h2'));

回调函数

一个返回HTML字符串、DOM 元素、 或者 jQuery 对象的函数,插在每个匹配元素的后面。接收元素在集合中的索引位置作为参数。在函数中this指向元素集合中的当前元素:

$('p').after(function() {
  return '<div>' + this.className + '</div>';
});

看看其源码的实现,内部都掉了了一个domManip方法

append: function() {
    return this.domManip(arguments, function(elem) {
        if (this.nodeType === 1 
            || this.nodeType === 11 
            || this.nodeType === 9) {
            var target = manipulationTarget(this, elem);
            target.appendChild(elem);
        }
    });
},
prepend: function() {
    return this.domManip(arguments, function(elem) {
        if (this.nodeType === 1 
            || this.nodeType === 11 
            || this.nodeType === 9) {
            var target = manipulationTarget(this, elem);
            target.insertBefore(elem, target.firstChild);
        }
    });
},

.domManip()是jQuery DOM操作的核心函数。dom即Dom元素,Manip是Manipulate的缩写,连在一起就是Dom操作的意思。

对封装的节点操作做了参数上的校正支持,与对应处理的调用:append、prepend、before、after、replaceWith、appendTo、prependTo、insertBefore、insertAfter、replaceAll。

为什么需要用这个domManip函数呢?

我们知道节点操作浏览器提供的接口无非就是那么几个:

appendChild()

通过把一个节点增加到当前节点的childNodes[]组,给文档树增加节点:

cloneNode()

复制当前节点,或者复制当前节点以及它的所有子孙节点:

hasChildNodes()

如果当前节点拥有子节点,则将返回true:

insertBefore()

给文档树插入一个节点,位置在当前节点的指定子节点之前。如果该节点已经存在,则删除之再插入到它的位置:

removeChild()

从文档树中删除并返回指定的子节点:

replaceChild()

从文档树中删除并返回指定的子节点,用另一个节点替换它。

以上接口都有一个特性,传入的是一个节点元素。如果我们传递不是一个dom节点元素,如果是一个字符串,一个函数或者其他呢?

所以针对所有接口的操作,jQuery会抽象出一种参数的处理方案,也就是domManip存在的意义了,针对很多类似接口的参数抽象jQuery内部有很多这样的函数了,如之前属性操作中的jQuery.access。

任务

?不会了怎么办
||

提问题

写笔记

截图
提交
||

请验证,完成请求

由于请求次数过多,请先验证,完成再次请求

加群二维码

打开微信扫码自动绑定

您还未绑定服务号

绑定后可得到

  • · 粉丝专属优惠福利
  • · 大咖直播交流干货
  • · 课程更新,问题答复提醒
  • · 账号支付安全提醒

举报

0/150
提交
取消
全部 精华 我要发布
全部 我要发布
最新 点赞
只看我的

手记推荐

更多

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?