首页 文章 精选 留言 我的

精选列表

搜索[JavaScript库],共10000篇文章
优秀的个人博客,低调大师

【JavaScript框架封装】在实现一个自己定义类似于JQuery的append()函数的时候遇到的问题及解决方案

版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81087543 主要问题: 在刚开始创建了这个函数之后,使用的时候,总是会出现一个问题,就是按照正常步骤给一个ID选择器添加子节点的时候正常,但是到了给一个class选择器的元素添加的时候始终只能添加一个。 下面是我自己定义的Append()函数: /** * 向现有的元素节点中添加dom节点(对使用选择器获取的一系列元素都添加孩子节点child) * @param child,这里创建的实际上是一个JQuery对象 */ append: function (child) { var doms = typeof child === 'string' ? $(child) : $(child[0]), arr = Array.prototype.slice.call(doms); for (var i = 0; i < this.length; i++){ for (var j = 0; j < doms.length; j++){ // 注意这里的操作, 由于在每次添加一个新的元素之后, this的长度就会增加,因此这里在修改之前先把this.length修改一下 this[i].appendChild(doms[j]); } } }, 测试的代码如下: 下面是按照原生的添加方法一步步添加一个DOM元素到指定节点的过程: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="parentNode"></div> <div class="box0">111</div> <div class="box1">222</div> <div class="box2">555</div> <div class="box3">444</div> <div class="box4">555</div> <div class="game">111</div> <div class="game">222</div> <div class="game">333</div> <div class="game">444</div> <div class="game">555</div> <div class="name">111</div> <div class="name">222</div> <div class="name">333</div> <div class="name">444</div> <div class="name">555</div> </body> </html> <script src="xframe006.js"></script> <script> var arr = [1, 2, 3] console.log(arr); var res = Array.prototype.slice.call(arr); console.log(res); //1. 创建一个DOM元素节点(这个DOM实际上是一个我自己封装的JQuery对象) var dom = $.create('span', {name: '52tech'}, '<a href="www.52tech.tech"></a>'); // DOM框架完整测试 $('#parentNode').append(dom); // append()测试: 主要问题, 如果一次向要给一个集合添加多个就不成功 /*var res = document.querySelectorAll('.box1'); for (var i = 0; i < 3; i++){ dom = document.createElement("p"); for (var j = 0; j < 3; j++){ res[j].appendChild(dom); } }*/ // 每一个DOMs里面存储的是一个HTMLCollection var doms = []; for (var i = 0; i < 5; i++) { doms.push( $.$class('box' + i) ); } // 第一种方式:开始遍历每一个元素 doms.forEach(function (element) { var dom = $.create('span', {name: '52tech'}, '<a href="www.52tech.tech"></a>'); element[0].appendChild(dom[0]); }); // 换一种方式:给一个类标签添加子节点, 里面存放的每一个元素都是一个HTMLcollection(完全OK) var res = $('.game'); Array.prototype.slice.call(res).each(function () { var dom = $.create('span', {name: '52tech'}, '<a href="www.52tech.tech"></a>'); this.appendChild(dom[0]); }); // 第三种方式的实现 var res = $('.name'); // 注意在使用append函数的时候,每次都需要重新创建一个DOM元素,因此这个DOM Node节点是不能放在外部的 error var dom = $.create('span', {name: '52tech'}, '<a href="www.52tech.tech"></a>'); Array.prototype.slice.call(res).each(function () { dom = $.create('span', {name: '52tech'}, '<a href="www.52tech.tech"></a>'); this.appendChild(dom[0]); }); // 创建一个DOM节点,添加到根节点 $('.name').each(function () { // DOM的创建必须在这个函数内部创建,否则会使用错误!!! var dom = $.create('span', {name: '52tech'}, '<a href="www.52tech.tech"></a>'); this.append(dom[0]); }); // appendTo()测试 var dom = $.create('span', {name : '52tech'}, '<a href="www.52tech.tech"></a>'); dom.appendTo(document); </script> 最终发现,在添加的时候,如果只创建了一个DOM元素,那么到最后始终能添加成功的就是只有一个的,但是,如果每次在添加之前创建了和获取的class的DOM元素相同数量的节点,就会添加成功,这个好像和C++/Java里面的创建对象的方式还是有些区别的,一个创建的元素是不能共享的!

优秀的个人博客,低调大师

KnowForge 2026.0.10:从知识库,开始长出一点“社区”了

KnowForge 2026.0.10 正式发布。 本次更新主要围绕 内容采集稳定性、用户关系与内容发现体验 进行了增强,同时进一步完善了后台任务与章节管理能力。 内容采集更稳定了 这次重点解决了整站采集过程中,遇到异常页面后可能长时间卡住,甚至阻塞其他后台任务的问题。 现在: 单个页面采集超过 90 秒会自动跳过并继续 超时后自动清理无头浏览器进程 长时间采集任务与邮件、通知、Sitemap 等常规任务分开执行 整站采集支持随时停止和继续 后台异步任务支持取消和重新排队 即使遇到无法正常加载的页面,也不会再拖住整个任务系统。 整站采集体验升级 书籍详情页新增「采集」入口,可以直接向当前书籍追加采集内容。 采集前的目录预览也支持拖拽调整,可以: 调整章节顺序 将页面拖成子章节 连同子页面一起移动 一键恢复原始目录 最终生成的书籍目录会按照调整后的结构创建。 新增用户关注 新增「用户关注」插件,并默认启用。 现在可以直接关注喜欢的作者,并在「我的关注」中查看: 已关注作者 作者最近更新的公开书籍 当有人关注你,或者你关注的作者发布新章节时,也可以收到通知。 这让 KnowForge 除了&ldquo;关注一本书&rdquo;,开始有了围绕创作者建立内容关系的能力。 全新排行榜 排行榜现在独立为插件,并增加了更多榜单: 创作榜 热门书籍 点赞榜 收藏榜 经验榜 粉丝榜 关注榜 每个榜单都支持: 累计 近 30 天 近 7 天 管理员还可以自由决定开放哪些榜单,以及它们在前台的显示顺序。 登录用户在用户类榜单中,也可以直接看到自己的排名。 章节管理优化 章节移动和复制体验也进行了优化。 现在可以直接: 在当前书籍内移动章节 在当前书籍内复制章节 搜索目标书籍 搜索并选择目标父章节 在本书内移动章节时,会保留原有章节地址、修订历史与评论。 2026.0.10 主要是在继续打磨 KnowForge 的几个核心场景: 更稳定地采集内容,更方便地组织章节,也让作者、读者和内容之间产生更多连接。 KnowForge &mdash; Forge Your Knowledge.

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

用户登录
用户注册