首页 文章 精选 留言 我的

精选列表

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

【JavaScript】不使用正则表达式和字符串的方式来解析浏览器的URl地址信息

版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/82532501 1.比如我们要获取的网站URl地址是:https://music.163.com/#/playlist?id=2384581760 一般我们能够想到的方式是直接使用正则表达式获取使用字符串直接解析的方式来一步步解析,但是如何有没有能够更高效率的方法呢? 答案是有的。 第一步:创建一个a标签对象(动态创建) var a = document.createElement('a') 第二步:开始赋值 a.href = window.location.href 第三步:使用这个而对象里面内部的方法 注意这种方法,对于我们直接在网页中的a标签是没有这个方法的,也算是一个小技巧吧,特此记录下来!

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

【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里面的创建对象的方式还是有些区别的,一个创建的元素是不能共享的!

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

【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。更多学习资料请访问我爱科技论坛:www.52tech.tech https://blog.csdn.net/m0_37981569/article/details/81055973 /* * @Author: 我爱科技论坛 * @Time: 20180715 * @Desc: 实现一个类似于JQuery功能的框架 * V 1.0: 实现了基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架的搭建 * V 2.0:实现了框架的进一步优化,具有良好的扩展性, 可以支持链式访问 * */ / 主框架: 只做一件事,就是用于获取所有的元素集合 (function (w) { // 定义一个Xframe对象,后面就是他的构造函数 var xframe = function (selector, context) { // 为了使得后面的函数this始终指向的是xframe框架,这里需要修改函数内部this的指向 return this.init.apply(this, [selector, context]); }; // 定义一个初始化函数,用于初始化获取所有的元素集合 // 只要用户使用了类似于JQuery中的选择元素的方法,就开始选择一个元素集合 // 这里的核心功能:实际上是为了使用一个伪数组实现一个类似于JQuery中的链式访问的功能 xframe.prototype.init = function (selector, context) { // 开始构建一个伪数组:{1 : list[0], 2 : list[1], , , , length : list.length} this.length = 0; if (typeof selector === 'string'){ var nodeList = (context || document).querySelectorAll(selector); this.length = nodeList.length; for (var i = 0, len = this.length; i < len; i++){ this[i] = nodeList[i]; } } else if (selector.nodeType){ // 如果获取的是一个元素节点,文本节点,或者属性节点的话 this[0] = selector; this.length++; } // 为了可以支持链式访问必须把这个this对象返回出去 return this; }; // 使用双对象法则继续暴露出去一个对象,进行对象的二次封装 // 【双对象法则的使用】 var $$ = function (selctor, context) { // 这里使用一个简单的异步加载机制,等待所有的DOM元素执行完毕之后再开始继续向下执行 if (typeof selctor === 'function'){ // selector就是DOM元素加载完毕之后的继续向下执行的回调函数 w.onload = selctor; } else { // 如果不是一个函数的话 return new xframe(selecor, context); } } // 添加一个extend方法, 用于扩充一个对象的方法, 扩展向一个类中拷贝方法 $$.extend = function () { // 这里需要分为两种情况: // 1. 如果传过来的是一个参数的话,就相当于是给xframe对象添加方法 // 2. 如果是两个参数的话,就相当于是给一个类扩充方法 var len = arguments.length, target = null, // target 用来存储需要把方法拷贝进去的目标函数 i = 1, // 初始化变量i, 表示需要开始遍历的起始位置标记 key; // 为了防止定义太多的局部变量,可以把后面需要用到的所有局部变量事先在前面定义好 if (len === 0){ return; } else if (len === 1){ // 给xrame对象添加方法 target = xframe.prototype; i--; } else{ // 两个参数的话,那么第一个参数就是我需要拷贝新的方法进去的目标对象 // 如果是两个参数的话:就不需要修改变量i的值了, 直接从第一个位置开始,拿到第一个参数后, 把第二个参数的方法全部拷贝给第一个对象 // 注意: 这里有可能也是三个参数或者是多个参数, 因此也可以吧后面的好几个对象的属性或者方法添加给第一个对象 target = arguments[0]; } // 确定好了target 这个目标对象以后,开始遍历原始对象那个source,把source里面的方法全部都拷贝到这个target对象里面 for (; i < len; i++){ // 这里实际上在遍历一个json对象,json对象的每一项实际上就是一个属性或者方法 for (key in source){ target[key] = arguments[i][key]; } } return target; } // 为了把主框架里面的局部变量暴露出去供其他模块使用 w.xframe = w.$ = $$; })(window); // 公共框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ each : function () { } }); // 不需要参与链式访问的 /*公共部分*/ xframe.extend(xframe, { }); /*字符串处理模块*/ xframe.extend(xframe, { }); /*数组相关*/ xframe.extend(xframe, { }); /*Math*/ xframe.extend(xframe, { }); /*数据类型检验*/ xframe.extend(xframe, { }); })(xframe); // 事件框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ each : function () { } }); // 不需要参与链式访问的 xframe.extend(xframe, { }); })(xframe); // 属性框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ each : function () { } }); // 不需要参与链式访问的 xframe.extend(xframe, { }); })(xframe); // 内容框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ each : function () { } }); // 不需要参与链式访问的 xframe.extend(xframe, { }); })(xframe); // DOM框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ each : function () { } }); // 不需要参与链式访问的 xframe.extend(xframe, { }); })(xframe); // 缓存框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ each : function () { } }); // 不需要参与链式访问的 xframe.extend(xframe, { }); })(xframe); // 基础框架: 基本上都是不需要参与链式访问的 // 实现功能: 如果是一个参数的话,就直接给类添加方法 // 如果是多个参数的话,就表示给指定的对象添加方法 xframe.extend(xframe, { ltrim: function () { }, rtrim: function () { }, trim: function () { }, ajax: function () { }, formateString: function () { }, random: function () { }, isNumber: function () { }, isBoolean: function () { }, isString: function () { }, isUndefined: function () { }, isObject: function () { }, isNull: function () { }, isArray: function () { }, }) // 选择框架 /*** * 如果下面的框架需要用到上面的框架,就直接可以把上面的去全局变量/对象暴露出去,这里是使用了前面的xframe全局变量 */ (function ($$) { $$.$all = function () { }; $$.$id = function (id) { }; $$.$tag = function () { }; $$.$class = function () { }; $$.$group = function () { }; $$.cengci = function () { }; $$.$select = function () { } })(xframe); // 事件框架 (function ($$) { $$.on = function () { } })(xframe); // CSS框架 (function ($$) { $$.css = function () { }; // 元素的显示与隐藏 $$.show = function () { }; $$.hide = function () { }; // 元素的宽度和高度 $$.width = function () { }; $$.height = function () { }; // 元素的滚动宽度和高度 $$.scrollWidth = function () { }; $$.scrollHeight = function () { }; // 滚动条相对于上面和左边的距离 $$.scrollTop = function () { }; $$.scrollLeft = function () { }; // 屏幕的宽度和高度 $$.screenWidth = function () { }; $$.screenHeight = function () { }; // 文档区域的宽度和高度 $$.wWidth = function () { }; $$.wHeight = function () { }; // 获取文档滚动窗口的相关属性参数信息 $$.wScrollHeight = function () { }; $$.wScrollWidth = function () { }; // 获取文档滚动窗口距离上面和左边的距离和宽度 $$.wScrollTop = function () { }; $$.wScrollLeft = function () { }; })(xframe); // 属性框架 (function ($$) { // 私有方法 function removeName() { }; function addName() { } // 公有方法 $$.attr = function () { }; $$.addClass = function () { }; $$.removeClass = function () { } })(xframe); // 内容框架 (function () { $$.html = function () { }; $$.text = function () { }; $$.val = function () { } })(); // 动画框架 (function () { function Animate() { } Animate.prototype = {} })();

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

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文件系统,支持十年生命周期更新。

用户登录
用户注册