深入学习jquery源码之before()和after()

2023-10-28

深入学习jquery源码之before()和after()

after(content|fn)

概述

在每个匹配的元素之后插入内容。

参数

content String, Element, jQuery

插入到每个目标后的内容

function Function

函数必须返回一个html字符串。

在所有段落之后插入一些HTML标记代码。

<p>I would like to say: </p>
$("p").after("<b>Hello</b>");
<p>I would like to say: </p><b>Hello</b>

在所有段落之后插入一个DOM元素。

<b id="foo">Hello</b><p>I would like to say: </p>
$("p").after( $("#foo")[0] );
<p>I would like to say: </p><b id="foo">Hello</b>

在所有段落中后插入一个jQuery对象(类似于一个DOM元素数组)。

<b>Hello</b><p>I would like to say: </p>
$("p").after( $("b") );
<p>I would like to say: </p><b>Hello</b>

 

before(content|fn)

概述

在每个匹配的元素之前插入内容。

参数 

content String, Element, jQuery

插入到每个目标后的内容

function Function

函数必须返回一个html字符串。

在所有段落之前插入一些HTML标记代码。

<p>I would like to say: </p>
$("p").before("<b>Hello</b>");
[ <b>Hello</b><p>I would like to say: </p> ]

在所有段落之前插入一个元素。

<p>I would like to say: </p><b id="foo">Hello</b>
$("p").before( $("#foo")[0] );
<b id="foo">Hello</b><p>I would like to say: </p>

在所有段落中前插入一个jQuery对象(类似于一个DOM元素数组)。

<p>I would like to say: </p><b>Hello</b>
$("p").before( $("b") );
<b>Hello</b><p>I would like to say: </p>

 

insertAfter(content)

概述

把所有匹配的元素插入到另一个、指定的元素元素集合的后面。

实际上,使用这个方法是颠倒了常规的$(A).after(B)的操作,即不是把B插入到A后面,而是把A插入到B后面。

在jQuery 1.3.2中,appendTo, prependTo, insertBefore, insertAfter, 和 replaceAll这个几个方法成为一个破坏性操作,要选择先前选中的元素,需要使用end()方法,参见 appendTo 方法的例二。

参数

content String

用于匹配元素的jQuery表达式

把所有段落插入到一个元素之后。与 $("#foo").after("p")相同

<p>I would like to say: </p><div id="foo">Hello</div>
$("p").insertAfter("#foo");
<div id="foo">Hello</div><p>I would like to say: </p>

insertBefore(content)

概述

把所有匹配的元素插入到另一个、指定的元素元素集合的前面。

实际上,使用这个方法是颠倒了常规的$(A).before(B)的操作,即不是把B插入到A前面,而是把A插入到B前面。

在jQuery 1.3.2中,appendTo, prependTo, insertBefore, insertAfter, 和 replaceAll这个几个方法成为一个破坏性操作,要选择先前选中的元素,需要使用end()方法,参见 appendTo 方法的例二。

参数

content String

用于匹配元素的jQuery表达式

把所有段落插入到一个元素之前。与 $("#foo").before("p")相同。

<div id="foo">Hello</div><p>I would like to say: </p>
$("p").insertBefore("#foo");
<p>I would like to say: </p><div id="foo">Hello</div>

 

 

jquery源码

       jQuery.each({
        insertBefore: "before",
        insertAfter: "after"
    }, function (name, original) {
        jQuery.fn[name] = function (selector) {
            var elems,
                i = 0,
                ret = [],
                insert = jQuery(selector),
                last = insert.length - 1;

            for (; i <= last; i++) {
                elems = i === last ? this : this.clone(true);
                jQuery(insert[i])[original](elems);

                // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
                push.apply(ret, elems.get());
            }

            return this.pushStack(ret);
        };
    });



   jQuery.fn.extend({
        before: function () {
            return this.domManip(arguments, function (elem) {
                if (this.parentNode) {
                    this.parentNode.insertBefore(elem, this);
                }
            });
        },

        after: function () {
            return this.domManip(arguments, function (elem) {
                if (this.parentNode) {
                    this.parentNode.insertBefore(elem, this.nextSibling);
                }
            });
        },
		
        domManip: function (args, callback) {

            // Flatten any nested arrays
            args = concat.apply([], args);

            var first, node, hasScripts,
                scripts, doc, fragment,
                i = 0,
                l = this.length,
                set = this,
                iNoClone = l - 1,
                value = args[0],
                isFunction = jQuery.isFunction(value);

            // We can't cloneNode fragments that contain checked, in WebKit
            if (isFunction ||
            (l > 1 && typeof value === "string" &&
                !support.checkClone && rchecked.test(value))) {
                return this.each(function (index) {
                    var self = set.eq(index);
                    if (isFunction) {
                        args[0] = value.call(this, index, self.html());
                    }
                    self.domManip(args, callback);
                });
            }

            if (l) {
                fragment = jQuery.buildFragment(args, this[0].ownerDocument, false, this);
                first = fragment.firstChild;

                if (fragment.childNodes.length === 1) {
                    fragment = first;
                }

                if (first) {
                    scripts = jQuery.map(getAll(fragment, "script"), disableScript);
                    hasScripts = scripts.length;

                    // Use the original fragment for the last item instead of the first because it can end up
                    // being emptied incorrectly in certain situations (#8070).
                    for (; i < l; i++) {
                        node = fragment;

                        if (i !== iNoClone) {
                            node = jQuery.clone(node, true, true);

                            // Keep references to cloned scripts for later restoration
                            if (hasScripts) {
                                jQuery.merge(scripts, getAll(node, "script"));
                            }
                        }

                        callback.call(this[i], node, i);
                    }

                    if (hasScripts) {
                        doc = scripts[scripts.length - 1].ownerDocument;

                        // Reenable scripts
                        jQuery.map(scripts, restoreScript);

                        // Evaluate executable scripts on first document insertion
                        for (i = 0; i < hasScripts; i++) {
                            node = scripts[i];
                            if (rscriptType.test(node.type || "") &&
                                !jQuery._data(node, "globalEval") && jQuery.contains(doc, node)) {

                                if (node.src) {
                                    // Optional AJAX dependency, but won't run scripts if not present
                                    if (jQuery._evalUrl) {
                                        jQuery._evalUrl(node.src);
                                    }
                                } else {
                                    jQuery.globalEval((node.text || node.textContent || node.innerHTML || "").replace(rcleanScript, ""));
                                }
                            }
                        }
                    }

                    // Fix #11809: Avoid leaking memory
                    fragment = first = null;
                }
            }

            return this;
        }
    });
	
	

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入学习jquery源码之before()和after() 的相关文章

  • 深入学习jquery源码之before()和after()

    深入学习jquery源码之before 和after after content fn 概述 在每个匹配的元素之后插入内容 参数 content String Element jQuery 插入到每个目标后的内容 function Func
  • 深入学习jquery源码之map()

    概述 将一组元素转换成其他数组 不论是否是元素数组 你可以用这个函数来建立一个列表 不论是值 属性还是CSS样式 或者其他特别形式 这都可以用 map 来方便的建立 参数 callback 给每个元素执行的函数 把form中的每个input
  • 深入学习jquery源码之Deferred对象与holdReady()

    深入学习jquery源码之Deferred对象与holdReady jQuery的Deferred对象也有resolve reject then方法 还有done fail always 方法 jQuery就是用这个Deferred对象来注
  • 深入学习jquery源码之jQuery的构造函数与实例化

    深入学习jquery源码之jQuery的构造函数与实例化 创建jQuery对象的整个流程如下 1 调用 方法 2 调用jQuery prototype init 构造函数 3 根据选择器不同返回不同的jQuery对象 4 不同jQuery对
  • 深入学习jquery源码之jQuery的选择器引擎Sizzle(一)

    深入学习jquery源码之jQuery的选择器引擎Sizzle Sizzle是一个纯javascript CSS选择器引擎 jquery1 3开始使用sizzle Sizzle一反传统采取了相反的Right To Left的查询匹配方式 效
  • 深入学习jquery源码之弹出框插件实现

    深入学习jquery源码之弹出框设计 jquery自带的提示框 messager confirm 提示 您确定通过吗 function r if r 弹出框插件 function window undefined var COOKIE US
  • 深入学习jquery源码之is()与not()

    深入学习jquery源码之is 与not is expr obj ele fn 概述 根据选择器 DOM元素或 jQuery 对象来检测匹配元素集合 如果其中至少有一个元素符合这个给定的表达式就返回true 如果没有元素符合 或者表达式无效
  • 深入学习jquery源码之attr()与removeAttr()

    深入学习jquery源码之attr 与removeAttr attr name properties key value fn 概述 设置或返回被选元素的属性值 参数 name String 属性名称 properties Map 作为属性
  • 深入学习jquery源码之noConflict()

    深入学习jquery源码之noConflict jQuery noConflict extreme 概述 运行这个函数将变量 的控制权让渡给第一个实现它的那个库 执行 var jq noConflict 后 将不再控制当前的jQuery 而
  • 深入学习jquery源码之empty()与返回值remove()

    深入学习jquery源码之empty 与返回值remove empty 概述 删除匹配的元素集合中所有的子节点 把所有段落的子元素 包括文本节点 删除 p Hello span Person span a href and person a
  • 深入学习jquery源码之查询选择插件的实现

    深入学习jquery源码之上传查询选择插件的实现 function var defaults url fieldCode multi false area 40 80 code code name 注意顺序 先是code 再是name fu
  • 深入学习jquery源码之wrap()和wrapAll()

    深入学习jquery源码之wrap 和wrapAll wrap html element fn 概述 把所有匹配的元素用其他元素的结构化标记包裹起来 这种包装对于在文档中插入额外的结构化标记最有用 而且它不会破坏原始文档的语义品质 这个函数
  • 深入学习jquery源码之获取url中参数插件

    深入学习jquery源码之获取url中参数插件 function window undefined 定义 通用工具方法 扩展对象基元 coreUtil function return Object apply this arguments
  • 深入学习jquery源码之each()

    each 遍历一个数组或对象 可以是DOM json等格式 等价于for循环 返回值 jQuery each callback 参数 对于每个匹配的元素所要执行的函数 概述 以每一个匹配的元素作为上下文来执行一个函数 意味着 每次执行传递进
  • 深入学习jquery源码之append()和prepend()

    深入学习jquery源码之append 和prepend append content fn 概述 向每个匹配的元素内部追加内容 这个操作与对指定的元素执行appendChild方法 将它们添加到文档中的情况类似 参数 content St
  • 深入学习jquery源码之isFunction()和isPlainObject()

    深入学习jquery源码之isFunction 和isPlainObject isArray obj 概述 测试对象是否为数组 参数 obj Object 用于测试是否为数组的对象 b append isArray b true b isF
  • 深入学习jquery源码之html()与text()和val()

    深入学习jquery源码之html 与text 和val html val fn 概述 取得第一个匹配元素的html内容 这个函数不能用于XML文档 但可以用于XHTML文档 在一个 HTML 文档中 我们可以使用 html 方法来获取任意
  • 深入学习jquery源码之replaceWith()和replaceAll()

    深入学习jquery源码之replaceWith 和replaceAll replaceWith content fn 概述 将所有匹配的元素替换成指定的HTML或DOM元素 参数 content String Element jQuery
  • 深入学习jquery源码之data()

    深入学习jquery源码之data jQuery data element key value 概述 在元素上存放数据 返回jQuery对象 注意 这是一个底层方法 你应当使用 data 来代替 此方法在jQuery 1 8中删除 但你仍然
  • 深入学习jquery源码之addClass()和toggleClass()与hasClass()

    深入学习jquery源码之addClass 和toggleClass 与hasClass addClass class fn 概述 为每个匹配的元素添加指定的类名 参数 class String 一个或多个要添加到元素中的CSS类名 请用空

随机推荐

  • WPF系列教程(二十四):将元素绑定到一起,数据绑定,属性之间的Binding

    项目源码 数据绑定 在窗体中放置了一个Slider控件和一个TextBlock控件
  • PCL 法向量约束的4PCS配准算法

    目录 一 算法原理 1 原理概述 2 参考文献 二 代码实现 三 结果展示 四 测试数据 一 算法原理 1 原理概述 设 B a b c d B a b c d
  • C++中的memset函数

    参考博客 https blog csdn net qq 25406563 article details 83303371 一 一般用于大的数据进行清0的操作 参考上述博客 整理清0数据操作 代码如下 include
  • 【例16 Java从键盘读入学生成绩,找出最高分,并输出学生成绩等级】

    例16 从键盘读入学生成绩 找出最高分 并输出学生成绩等级 成绩 gt 最高分 10 等级为 A 成绩 gt 最高分 20 等级为 B 成绩 gt 最高分 30 等级为 C 其余 等级为 D 提示 先读入学生人数 根据人数创建int数组 存
  • python Pandas庫的學習

    Pandas Series對象 Series 對象用於表示一維的數據結構 其主數組的每個元素都會有一個與之相關聯的標簽 大致如下圖所示 對象的聲明 通過 pd Series 進行聲明 在未指定標簽的情況下 默認使用從0開始一次遞增的數值作爲
  • 创建django项目+创建子应用

    创建django项目 1 work vir1进入虚拟环境 2 通过cd切换到工程目录 django项目会安装至此 3 确保虚拟环境下django 1 11 11安装了 4 创建django项目 django admin startproje
  • Qr Code 二维码的生成与解码

    版权声明 原创文章欢迎转载 不过要记得说明出处 生成二维码 下载phpqrcode 不带logo的二维码 require once phpqrcode qrlib php 图片名 默认为false 直接输出 fileName qr jpg
  • linux tc模拟弱网环境(丢包)

    0 背景 项目需要模拟弱网环境下 测试音视频的编解码功能 在linux系统下可以使用tc工具模拟弱网环境 包括出 入流量的丢包等 1 tc工具介绍 2 网卡出数据 netem Network Emulator 可以用来对网卡发出的数据包进行
  • java、python、 node、js(ES6)、Vue导入外部的函数或者变量

    java import org springframework boot SpringApplication python import os from flask import flask babel flask session node
  • Django期末模拟题

    Django期末模拟题 整个项目下载 点击下载整个项目 题目 综合复习题 商品信息系统后台管理 一 语言和环境 1 实现语言 python 2 环境要求 pycharm mysql 3 使用技术 django2 2 3 二 实现功能 利用d
  • git学习(三)git did not exit cleanly (exit code 1)

    问题描述 在执行Git Commit到本地分支是会遇到该问题 问题解决 原因应当是有些文件是unversioned files 要勾选上下图的Amend last Commit 然后再选中main cpp进行commit就可以了
  • win10的哪个版本最好用?

    自2015年以来 win10系统发布过不少版本 这也让很多用户很迷茫 具体哪个版本好用 还要看个人使用习惯 下面好系统U盘启动就来给大家把1803 1709 1703 1607 1511几个版本做一下简单比较 Win 1803版 1803感
  • 微信小程序中生成普通二维码,并根据二维码里的参数跳转对应的页面

    微信小程序中生成普通二维码 并根据二维码里的参数跳转对应的页面 1 打开 微信公众平台 https mp weixin qq com 使用encodeURIComponent 对参数进行转码 第一步 对要传递的参数进行编码 第二步 生成二维
  • 微信WeixinJSBridge API使用实例

    企业号开发者中心 Weixin JS接口 http qydev weixin qq com wiki index php title WeixinJS E6 8E A5 E5 8F A3 oldid 287 来源 http www jb51
  • 课时 11:可观测性:你的应用健康吗?(莫源)

    本次课程的分享主要围绕以下五个部分 介绍一些整体需求的来源 介绍在 K8s 中 Liveness 和 Readiness 的使用方式 介绍在 K8s 中常见问题的诊断 应用的远程调试的方式 课程的总结与实践 需求来源 首先来看一下 整个需求
  • vue项目中自定义icon图标

    vue项目中有时需要用到自定义图标 用法如下 新建icon css文件 定义图标及其名称 指针图标 icon pointer background url assets images pointer png no repeat center
  • 渲染线程运行-大象无形11.1.2

    将目光转移到RenderingThreadMain 函数 这是个任务系统 各种渲染任务在此执行 1 通过ENQUEUE RENDER COMMAND向队列添加渲染任务 可见 有很多种渲染任务 二 查看其定义 1 2 查看EnqueueUni
  • 【附源码】计算机毕业设计SSM物流库存管理系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 【翻译】fancyBox 3中文文档

    fancyBox3 中文文档 译文永久地址 https kangkai124 github io fancybox 说明 本文档仅供参考 更新不及时请查看官方文档 1 介绍 fancyBox是一个JavaScript库 它以优雅的方式展示图
  • 深入学习jquery源码之before()和after()

    深入学习jquery源码之before 和after after content fn 概述 在每个匹配的元素之后插入内容 参数 content String Element jQuery 插入到每个目标后的内容 function Func