DOMLazyTree模块用于向文档中插入、替换节点,以更新子节点或html或text。
setInnerHTML模块设置节点的innerHTML。
setTextContent模块为文本节点添加nodeValue,其他节点添加textContent或经转义后的innerHTML。
createMicrosoftUnsafeLocalFunction模块用于使ie浏览器禁用func函数的html安全筛选(通常是拼接节点时),非ie浏览器直接返回回调。
DOMLazyTree.js
'use strict'; // 节点命名空间的集合 var DOMNamespaces = require('./DOMNamespaces'); // 为节点添加innerHTML var setInnerHTML = require('./setInnerHTML'); // ie浏览器禁用func函数的html安全筛选(通常是拼接节点时),非ie浏览器直接返回回调 var createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction'); // 文本节点添加nodeValue,其他节点添加textContent或经html转义后的innerHTML var setTextContent = require('./setTextContent'); var ELEMENT_NODE_TYPE = 1; var DOCUMENT_FRAGMENT_NODE_TYPE = 11; // IE8-11或Edge下,向文档插入含子节点的节点要快于插入含子节点的节点 var enableLazy = typeof document !== 'undefined' && typeof document.documentMode === 'number' || typeof navigator !== 'undefined' && typeof navigator.userAgent === 'string' && /\bEdge\/\d/.test(navigator.userAgent); // 将tree.children或tree.html或tree.text插入tree.node中 function insertTreeChildren(tree) { if (!enableLazy) { return; } var node = tree.node; var children = tree.children; if (children.length) { for (var i = 0; i < children.length; i++) { insertTreeBefore(node, children[i], null); } } else if (tree.html != null) { setInnerHTML(node, tree.html); } else if (tree.text != null) { setTextContent(node, tree.text); } } // 将tree.node插入文档,并塞入newTree.children或newTree.html或newTree.text var insertTreeBefore = createMicrosoftUnsafeLocalFunction(function (parentNode, tree, referenceNode) { // DocumentFragments、<object> plugins (like Flash Player)需要先插入子节点,然后再插入文档 if (tree.node.nodeType === DOCUMENT_FRAGMENT_NODE_TYPE || tree.node.nodeType === ELEMENT_NODE_TYPE && tree.node.nodeName.toLowerCase() === 'object' && (tree.node.namespaceURI == null || tree.node.namespaceURI === DOMNamespaces.html)) { insertTreeChildren(tree); parentNode.insertBefore(tree.node, referenceNode); } else { parentNode.insertBefore(tree.node, referenceNode); insertTreeChildren(tree); } }); // 将节点从oldNode替换成newTree.node,并塞入newTree.children或newTree.html或newTree.text function replaceChildWithTree(oldNode, newTree) { oldNode.parentNode.replaceChild(newTree.node, oldNode); insertTreeChildren(newTree); } // IE8-11或Edge,将子节点存储在tree.children中,DOMLazyTree.insertTreeBefore方法调用时再行插入子节点 // 其他浏览器,直接将子节点插入tree.node下 function queueChild(parentTree, childTree) { if (enableLazy) { parentTree.children.push(childTree); } else { parentTree.node.appendChild(childTree.node); } } // IE8-11或Edge,将html存储在tree.html中,DOMLazyTree.insertTreeBefore方法调用时再行插入html // 其他浏览器,直接将html插入tree.node下 function queueHTML(tree, html) { if (enableLazy) { tree.html = html; } else { setInnerHTML(tree.node, html); } } // IE8-11或Edge,将text存储在tree.text中,DOMLazyTree.insertTreeBefore方法调用时再行插入text // 其他浏览器,直接将text插入tree.node下 function queueText(tree, text) { if (enableLazy) { tree.text = text; } else { setTextContent(tree.node, text); } } // 返回tree.node.nodeName function toString() { return this.node.nodeName; } function DOMLazyTree(node) { return { node: node, children: [], html: null, text: null, toString: toString }; } // insertTreeBefore(parentNode,tree,referenceNode)将tree.node插入文档,并塞入newTree.children或newTree.html或newTree.text DOMLazyTree.insertTreeBefore = insertTreeBefore; // replaceChildWithTree(oldNode,newTree)将节点从oldNode替换成newTree.node,并塞入newTree.children或newTree.html或newTree.text DOMLazyTree.replaceChildWithTree = replaceChildWithTree; // queueChild(parentTree,childTree)插入子节点,IE8-11或Edge先存储于tree.children中,insertTreeBefore方法调用时再插入文档 DOMLazyTree.queueChild = queueChild; // queueHTML(tree,html)插入子节点,IE8-11或Edge先存储于tree.html中,insertTreeBefore方法调用时再插入文档 DOMLazyTree.queueHTML = queueHTML; // queueText(tree,text)插入子节点,IE8-11或Edge先存储于tree.text中,insertTreeBefore方法调用时再插入文档 DOMLazyTree.queueText = queueText; module.exports = DOMLazyTree;
setInnerHTML.js
'use strict'; var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment'); // 节点命名空间的集合 var DOMNamespaces = require('./DOMNamespaces'); var WHITESPACE_TEST = /^[ \r\n\t\f]/;// 空格符匹配 var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/; // ie浏览器禁用func函数的html安全筛选(通常是拼接节点时),非ie浏览器直接返回回调 var createMicrosoftUnsafeLocalFunction = require('./createMicrosoftUnsafeLocalFunction'); var reusableSVGContainer; var setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) { // 为svg节点或普通dom节点赋予html内容 if (node.namespaceURI === DOMNamespaces.svg && !('innerHTML' in node)) { reusableSVGContainer = reusableSVGContainer || document.createElement('div'); reusableSVGContainer.innerHTML = '<svg>' + html + '</svg>'; var svgNode = reusableSVGContainer.firstChild; while (svgNode.firstChild) { node.appendChild(svgNode.firstChild); } } else { node.innerHTML = html; } }); if (ExecutionEnvironment.canUseDOM) { var testElement = document.createElement('div'); testElement.innerHTML = ' '; if (testElement.innerHTML === '') { setInnerHTML = function (node, html) { // IE8更新节点时空白字符将表现出怪异,重新添加节点能处理空白字符的怪异表现 if (node.parentNode) { node.parentNode.replaceChild(node, node); } // 包含空格或以"<"开头、包含NONVISIBLE_TEST中字符 if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) { // 节点的innerHTML前插入字符String.fromCharCode(0xFEFF),作为node的首个节点firstChild // 再通过node.removeChild或textNode.deleteData方法移除该文本子节点 // String.fromCharCode(0xFEFF)是出于对UglifyJS清除U+FEFF的考虑 node.innerHTML = String.fromCharCode(0xFEFF) + html; var textNode = node.firstChild; if (textNode.data.length === 1) { node.removeChild(textNode); } else { textNode.deleteData(0, 1); } } else { node.innerHTML = html; } }; } testElement = null; } // 设置节点的innerHTML module.exports = setInnerHTML;
setTextContent.js
'use strict'; var ExecutionEnvironment = require('fbjs/lib/ExecutionEnvironment'); // 布尔型和数值型转化为字符串后输出;字符串经html转码,逐个字符处理["'&<>] var escapeTextContentForBrowser = require('./escapeTextContentForBrowser'); // 为节点添加innerHTML var setInnerHTML = require('./setInnerHTML'); // 文本节点添加nodeValue,其他节点添加textContent var setTextContent = function (node, text) { if (text) { var firstChild = node.firstChild; if (firstChild && firstChild === node.lastChild && firstChild.nodeType === 3) { firstChild.nodeValue = text; return; } } node.textContent = text; }; if (ExecutionEnvironment.canUseDOM) { // 文本节点添加nodeValue,其他节点添加转义后的innerHTML if (!('textContent' in document.documentElement)) { setTextContent = function (node, text) { if (node.nodeType === 3) { node.nodeValue = text; return; } setInnerHTML(node, escapeTextContentForBrowser(text)); }; } } module.exports = setTextContent;
createMicrosoftUnsafeLocalFunction.js
'use strict'; // ie浏览器禁用func函数的html安全筛选(通常是拼接节点时),非ie浏览器直接返回回调 var createMicrosoftUnsafeLocalFunction = function (func) { // MSApp.execUnsafeLocalFunction(func),ie下为指定函数funct禁用html安全筛选,通常是拼接节点时 if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) { return function (arg0, arg1, arg2, arg3) { MSApp.execUnsafeLocalFunction(function () { return func(arg0, arg1, arg2, arg3); }); }; } else { return func; } }; module.exports = createMicrosoftUnsafeLocalFunction;
相关推荐
基于springboot大学生就业信息管理系统源码数据库文档.zip
基于java的驾校收支管理可视化平台的开题报告
时间序列 原木 间隔5秒钟 20241120
毕业设计&课设_基于 Vue 的电影在线预订与管理系统:后台 Java(SSM)代码,为毕业设计项目.zip
基于springboot课件通中小学教学课件共享平台源码数据库文档.zip
基于java的网上购物商城的开题报告
Delphi人脸检测与识别Demo1fdef-main.zip
基于java的咖啡在线销售系统的开题报告
基于java的自助医疗服务系统的开题报告.docx
内容概要:本文档全面介绍了Visual Basic(VB)编程语言的基础知识和高级应用。首先概述了VB的基本特性和开发环境,随后详细讲述了VB的数据类型、变量、运算符、控制结构、数组、过程与函数、变量作用域等内容。接着介绍了窗体设计、控件使用、菜单与工具栏的设计,文件操作、数据库访问等关键知识点。最后讨论了VB的学习方法、发展历史及其在桌面应用、Web应用、数据库应用、游戏开发和自动化脚本编写等领域的广泛应用前景。 适合人群:初学者和中级程序员,尤其是希望快速掌握Windows桌面应用开发的人群。 使用场景及目标:①掌握VB的基础语法和开发环境;②学会使用VB创建复杂的用户界面和功能完整的应用程序;③理解数据库操作、文件管理和网络编程等高级主题。 其他说明:Visual Basic是一种简单易学且功能强大的编程语言,尤其适合用于开发Windows桌面应用。文中不仅覆盖了基础知识,还包括了大量的实用案例和技术细节,帮助读者快速提升编程技能。
基于java的疫情期间高校防控系统开题报告.docx
基于springboot+vue社区老年人帮扶系统源码数据库文档.zip
基于java的超市商品管理系统的开题报告.docx
基于SpringBoot房屋买卖平台源码数据库文档.zip
xdu限通院23微处理器系统与应用大作业(两只老虎),适应于汇编语言keil软件,
<项目介绍> - 新闻类网站系统,基于SSM(Spring、Spring MVC、MyBatis)+MySQL开发,高分成品毕业设计,附带往届论文 - 不懂运行,下载完可以私聊问,可远程教学 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
基于java的学生网上请假系统的开题报告.docx
社会经济繁荣发展的今天,电子商务得到了飞速发展,网上交易越来越彰显出其独特的优越性,在人们的日常生活中,出现了各种类型的交易网站。其中一个就是车辆易主交易网站,它是一个服务于用户买卖二手车辆的交易网站,为用户提供了平等互利、方便快捷的网上交易平台,通过这一类型的网站,用户可自由出售和购买车辆。 本课题主要根据车辆本身的特性,充分发挥互联网的特点与优势,构建一个以二手车辆为商品、基于互联网平台的车辆易主业务交易管理系统,并根据车辆易主业务交易管理系统的应用需求,进行需求分析,进而对网站系统作规划设计。采用IDEA为运行平台,以SSH为框架,运用HTML语言、JSP技术、MySql数据库、JSP与后台数据库链接等关键技术建设二手车网上交易系统,构建车辆易主交易系统的会员注册与登录,网站首页展示、用户发布商品车辆,用户求购商品车辆,分页浏览、购物系统、用户后台管理、管理员用户后台管理等功能,并使这些功能得以实现并更好为用户服务。网站整体构建完成且测试成功后,用户可以进入网站进行注册、登录,登录后,用户可以在网站上发布自己的闲置车辆或者寻找想要购买的车辆,还可以收藏车辆,管理发布和收藏的车辆,
SQLite3的向量扩展库,windows dll,版本0.1.5
基于C++实现(控制台)商品库存管理系统