jQuery 独立于级别包装多个元素

2024-06-12

这是我在 stackoverflow 上的第一篇文章。到目前为止我总能在这里找到答案,但这次我找不到。

这是我的 DOM 结构:

<div id="elementA">
    <div id="elementB"></div>
    <div id="elementC">
         <div id="elementD"></div>
    </div>
    <div id="elementE"></div>
</div>

如何将 2 个或更多选定的“随机”元素包装到包装容器中?如果所选元素位于不同级别并且中间有其他元素,这也应该有效。所有其他元素的 DOM 结构不应受到影响。

下面举几个例子:

示例1:

我想到了这样的事情:

var element1 = $('#elementB');
var element2 = $('#elementE');

??? $(element1, element2).myWrap(".wrapper"); ???

结果应该是这样的:

<div id="elementA">
    <div class="wrapper">
        <div id="elementB"></div>    
        <div id="elementC">
             <div id="elementD"></div>
        </div>
        <div id="elementE"></div>
    </div>
</div>

2 示例:

元素处于不同的级别。

var element1 = $('#elementD');
var element2 = $('#elementE');

??? $(element1, element2).myWrap(".wrapper"); ???

Result:

<div id="elementA">
    <div id="elementB"></div>
    <div class="wrapper">
        <div id="elementC">
             <div id="elementD"></div>
        </div>
        <div id="elementE"></div>
    </div>
</div>

示例3:超过 2 个元素:

var element1 = $('#elementD');
var element2 = $('#elementC');
var element3 = $('#elementA');

??? $(element1, element2, element3).myWrap(".wrapper"); ???

<div class="wrapper">
    <div id="elementA">
        <div id="elementB"></div>    
        <div id="elementC">
             <div id="elementD"></div>
        </div>
        <div id="elementE"></div>
    </div>
</div>

示例4:不同的树:

var element1 = $('#elementD');
var element2 = $('#elementF');

??? $(element1, element2).myWrap(".wrapper"); ???


<div id="elementA">
    <div id="elementB"></div>    
    <div class="wrapper">
        <div id="elementC">
             <div id="elementD"></div>
        </div>
        <div id="elementE">
             <div id="elementF"></div>
        </div>
    </div>
</div>

正如上面的评论所指出的,第一个示例与其他示例的不同之处在于,当指定的子级都是直系后代时,则应包装公共父级中的所有子级。

使用此逻辑,以下解决方案有效。

jQuery.fn.myWrap = function(options) {
    var e = this;

    // find most nested
    var max = null;
    var $mostNested = null;

    $(e).each(function(i, elem) {
        var parents = $(elem).parents().length;
        if (parents > max || max == null) {
            max = parents;
            $mostNested = $(elem);
        }
    })

    // find common parent
    var found = false;
    $parent = $mostNested.parent();
    while($parent != null && !found) {
        if ($parent.find(e).length == e.length) {
            // Right Level
            found = true;
            var toWrap = [];
            var numDirect = 0;
            $.each($parent.children(), function(i, item) {
                var direct = $(e).index(item) >= 0;
                var sibling = $(item).find(e).length > 0;
                if (direct) numDirect++;
                if (direct || sibling) toWrap.push(item);
            })
            if (numDirect == e.length) {
                // All direct! (Example 1)
                $parent.children().wrapAll("<div class='wrapper'></div>");
            } else {
                // Other Examples
                $(toWrap).wrapAll("<div class='wrapper'></div>");
            }
        }
        $parent = $parent.parent();    
    }
};


$(document).ready(function() {
    // Example 1
    $('#elementB, #elementE').myWrap();
    // Example 2
    //$('#elementD, #elementE').myWrap();
    // Example 3
    //$('#elementD, #elementC, #elementA').myWrap();
    // Example 4
    //$('#elementD, #elementF').myWrap();
})

See 我的小提琴 http://jsfiddle.net/7BcXW/4/.

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

jQuery 独立于级别包装多个元素 的相关文章

  • 请使用同一按钮播放和暂停音频

    我有这段代码并且只是播放 但我想使用相同的按钮 图像 播放和暂停 并且我不知道我需要添加什么 我需要做什么 请帮帮我
  • 我如何在ajax应用程序中找到未使用的css?

    我一直在搜索 但找不到任何 ff 插件或 javascript 来查找 ajax 应用程序中未使用的 css 除尘选择器 http www sitepoint com dustmeselectors 可以进行网站抓取 但我正在寻找检查加载内
  • 切换 Ag-Grid 中的浮动过滤器?

    我试图通过开关或按钮单击来确定浮动过滤器的显示 看起来很简单 我应该能够在 true 和 false 之间切换 将该值提供给网格选项中的浮动过滤器 然后刷新标题 对吗 不幸的是 网格似乎总是落后一步 当我第一次点击时 什么也没有发生 当我将
  • 如何使用jQuery加载跨域html

    我有 2 个不同的 java web 项目在 2 个不同的 tomcat 服务器上运行 假设 projA 和 projB 在这里 我尝试从 projA 加载 projB 中可用的 html 我只是使用 jQuery load 来实现这一点
  • JSON 解析错误 - JSON 中位置 1 处出现意外标记 o

    我需要获取一个 JSON 对象并记录标题控制台以实现自动完成功能 我的 json 的示例如下 title Example 1 url http www example1 com title Example 2 url http www ex
  • Puppeteer 登录 Instagram

    我正在尝试使用 Puppeteer 登录 Instagram 但不知何故无法登录 你能帮助我吗 这是我正在使用的链接 https www instagram com accounts login https www instagram co
  • 为什么这个 fs.readFile 循环没有将其结果推送到我的数组? [复制]

    这个问题在这里已经有答案了 usr bin env node var fs require fs async require async program require commander program version 0 0 1 usa
  • 递归process.nextTick警告

    作为我的应用程序的一部分 我有以下代码行 process nextTick function pre populate cache with all users console log scanning users table in ord
  • JavaScript - babel-preset-env 不为 IE11 转换箭头函数

    我很难尝试配置 Babel 来转译 IE11 可以理解的代码 特别是箭头函数 跑步npx webpack mode development使用我的配置不会转换我的代码中的箭头函数 在eval 在生成的代码中的语句中 我可以看到所有实例都未转
  • 如何向用户提供 Ajax POST 响应作为下载?

    我正在尝试在包含帐户信息的现有页面中包含 vCard 导出功能 丑陋的方法包括 1 向同一页面提交表单 处理它并重新渲染整个页面 或者 2 针对页面上的 iframe 进行 GET 我真的很想避免这两种情况 但我可能必须使用 2 来实现目标
  • 如何在反应路由器的登录页面中隐藏导航栏

    我想隐藏登录页面中的导航栏 我确实做到了 但我在其他页面上看不到导航栏 此代码是 My App jsx 文件的一部分 我在 App 的状态中创造了历史 当路径名是 或 login 时 我会隐藏导航栏 有用 但随后我输入了 ID 和密码 然后
  • 如何在 Electron 中使窗口大小响应。 (打开应用程序时)

    我最近开始在 Electron 上制作一个应用程序 我想让窗口具有响应能力 例如 如果我在不同的屏幕上打开应用程序 它应该根据屏幕尺寸以全尺寸打开 我的代码 app on ready gt const htmlPath path join
  • 如何拆分字符串,在特定字符处断开?

    我有这个字符串 john smith 123 Street Apt 4 New York NY 12345 使用 JavaScript 将其解析为最快的方法是什么 var name john smith var street 123 Str
  • 将变量从一个 jsp 发送到另一个 jsp

    我有一个 JSP 文件jsp 1 jsp和另一个 JSP 文件jsp 2 jsp 我已经包括了jsp 2 jsp in jsp 1 jsp using 现在我需要某个元素上的单击事件 在该事件中 我想将字符串变量传输到包含的 jsp 中 假
  • CORS:为什么我的浏览器不发送 OPTIONS 预检请求?

    从我读到的内容来看CORS https en wikipedia org wiki Cross origin resource sharing 我理解它应该按如下方式工作 客户端的脚本尝试获取资源从服务器不同的起源 浏览器拦截这个请求并首先
  • 未捕获的类型错误:无法分配给只读属性

    我正在尝试 Nicholas Zakas 所著的 Professional JavaScript for Web Developers 一书中的这个非常简单的示例 但我不知道我在这里做错了什么 我错过了一些非常简单的事情 但我被困住了 这是
  • 如何捕获 google 地图的无效 API 密钥

    我有这个代码 如果密钥无效 则会弹出警报 但我想在这种情况下执行一些操作 但我不知道如何连接它 有任何想法吗 Google 不提供检查 Google 地图 API 密钥的外部方法 因此 您无法使用例如查询某些服务 此代码有效吗abcde12
  • React Native:当您的应用程序关闭时是否有回调函数?

    我有一个 setInterval 即使您关闭 而不是退出 应用程序也会继续运行 我想在我的应用程序关闭或设备进入睡眠状态时调用一个函数 以便清除 setInterval AppState 是你的朋友 看看AppState 的文档 https
  • 如何防止外部 CSS 添加和覆盖 ReactJS 组件样式

    我有一个自定义的 ReactJS 组件 我想以某种方式设置样式 并将其作为插件提供给许多不同的网站 但是 当网站使用全局样式 Twitter bootstrap 或其他 css 框架 时 它会添加并覆盖我的组件的样式 例如 全局 css l
  • 将画布下载为 PNG 图像[重复]

    这个问题在这里已经有答案了 当我尝试将画布下载为 PNG 图像时 浏览器会在新页面中打开该图像 但不下载它 我的下载代码 btnScaricaEtichetta click function console log Download loc

随机推荐

  • 如何使用 Tensorflow 中的 Hugging Face Transformers 库对自定义数据进行文本分类?

    我正在尝试使用 Hugging Face Transformers 库提供的不同变压器架构对自定义数据 csv 格式 进行二进制文本分类 我正在用这个张量流博客文章 https blog tensorflow org 2019 11 hug
  • Scikit - 结合比例和网格搜索

    我是 scikit 的新手 在结合数据规模和网格搜索时遇到两个小问题 高效洁牙机 考虑使用 Kfolds 进行交叉验证 我希望每次我们在 K 1 折叠上训练模型时 数据缩放器 例如使用 preprocessing StandardScale
  • Android WebView 在最新更新到 v90.0.4430.82 时渲染内容时崩溃

    WebView更新v90 0 4430 82 在 WebView 内渲染内容似乎存在一些问题 加载正常 但在屏幕上显示却不行 看起来这是随机的 但却是一致的 有些 URL 渲染得很好 但其他 URL 在渲染时会不断导致应用程序崩溃 在此更新
  • 检测控件是否已释放

    在我的应用程序中 我有一个使用线程池执行异步操作的用户控件 线程池方法如下 private void AsyncFunction object state do the calculation refresh the grid data o
  • 在 Access 表单上将控件分组在一起

    我有一个 Access2003 表单 我想将多个控件组合在一起并通过 VBA 代码以编程方式更改可见性 这可能吗 我确实知道我可以通过 格式 gt 组 对项目进行分组 但如果这样做 如何在代码中引用整个组 谢谢 您可以将所有控件放置在组框控
  • Android opengl在绘制调用后修改顶点数组

    在opengl中 绘制顶点数组后这是不好的做法还是不建议修改它 It s not如果在将顶点数组绘制为普通顶点数组时修改它 这是一种不好的做法 It s如果在绘制方法中使用顶点缓冲区对象 则修改顶点数组是不好的做法 这是因为编辑后您必须将其
  • RuntimeException:必须提供 MemberAccess 实现

    我正在使用一个访问公共字段的模板Customer像这样的对象 div div div div div div div div div div 然而 当我打电话时process on the TemplateEngine templateEn
  • 随机调用的联系人 ContentObserver

    我正在使用 ContentObserver 来监听联系人数据库中的更改 现在我意识到 onChange 方法会被随机调用 即使我没有对联系人进行任何更改 我怀疑这在某种程度上与自动联系人同步有关 即使此时联系人没有真正的更改 仅当用户对联系
  • 如何估计 std::map 的内存使用情况?

    例如 我有一个已知 sizeof A 和 sizeof B 的 std map 而 map 内部有 N 个条目 您如何估计其内存使用情况 我想说这就像 sizeof A sizeof B N factor 但到底是什么因素呢 也许不同的公式
  • 黄瓜(Java 中):如何仅使用两个标签运行场景

    我有一些功能文件 每个场景都有多个标签 但我想运行那些同时具有 a 和 b 场景的人 我怎样才能做到这一点 tags a b gt this will do a OR b scenarios Thanks 我想到了 Tags a b gt
  • spring boot测试如何获取服务器端口

    我有 Spring Boot 1 5 3 应用程序 有一条线server port 8081在 application properties 文件中 现在我想测试一下 ping 方法 private final Environment en
  • Cakephp 在 Bluehost 上安装

    如何设置 Cakephp 才能在 Bluehost 上正常工作 我应该将我的应用程序 cake 和供应商文件夹以及 htaccess 和 index php 文件放在 public html 目录中吗 我按照这里的说明进行操作 http b
  • 有效大括号 - CodeWars 挑战

    有一个对代码战的挑战 https www codewars com kata valid braces train javascript它要求您检查圆括号 方括号和大括号组成的字符串是否有效 如果所有大括号都与正确的大括号匹配 则认为一串大
  • 禁用淘汰排序中的单个项目

    在淘汰赛排序中 我知道您可以使用禁用可排序列表isEnabled in the sortable捆绑 我还知道您可以使用禁用移动项目cancelDrop in a beforeMove功能 问题是 isEnabled禁用整个列表 并且can
  • pytesseract 不从图像中提取文本

    我有以下图像并尝试使用 pytesseract 提取文本 但是 它总是返回一些未知的字符 Image 这是我正在使用的代码 import pytesseract as pt from PIL import Image Converting
  • 为什么operator = 返回*this?

    假设我想覆盖operator 所以我可以做类似的事情 Poly p1 an object representing a polynomial Poly p2 another object of the same type p2 p1 ass
  • 如何在模板参数列表中传递模板函数

    假设我有一个template功能 template
  • Google Drive api v3 响应为空

    我想尝试上传文件谷歌驱动器 我的代码在这里 public static File UploadFile DriveService service string fileName string filePath string descript
  • 在类内部和外部定义的模板类的成员函数之间的区别

    在类声明内部和外部为模板类定义成员函数之间有区别吗 里面定义 template
  • jQuery 独立于级别包装多个元素

    这是我在 stackoverflow 上的第一篇文章 到目前为止我总能在这里找到答案 但这次我找不到 这是我的 DOM 结构 div div div div div div div div div div 如何将 2 个或更多选定的 随机