- 浏览: 1460120 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
Beyond Compare 2 是一款很好的文件比较工具,并且可以很方便地将结果导出为html格式显示,如图所示 :
原图结果:
而不像他的桌面客户端一样可以各个文件可以拖动比较,而是整个窗口出现滚动条了,不方便在两个文件的同一行数据的同一位置进行比较。
改进分析:
1.结果 html 采用 table 显示数据,两个文件的同一位置代码位于 table 的同一行不同 td ,而 table 采用 auto table-layout 而使得代码表格撑破浏览器窗口了,应使用固定表格布局。
2.代码文字直接显示在 td 中,而滚动条则不能出现在 td 上。应在 td 中嵌套 div 从而使得 div 拥有滚动条可以滚动,并且滚动条div还要嵌套入数据div,并使得所有数据div具有相同宽度(最大宽度),使得即使很短的代码表格文本也可以滚动,同步长代码行。
3.需要一种最底层滚动条,使得其可以控制所有上述table的所有单元格同步滚动。
4.对于两个大文件的对比,要利用分时计算来防止浏览器失去响应。(当文件超过200K,建议使用chrome,否则请耐心等待)
图示分析:
改进结果:
上述步鄹都可以在原始页面载入后,利用 javascript 遍历 DOM 树来进行样式以及结构的调整 ,即只需要在原html 代码 中加入
<script src="patch.js"></script>
即可。
改进后:
代码注释讲解 (示例附件 ):
/* Beyond Compare 2 patch for html result author:yiminghe.iteye.com try MIT licence */ Ext.onReady(function () { var mask = Ext.getBody().mask("start process ... "); var maskMessage = Ext.getBody()._maskMsg.dom.firstChild; /* 分时计算,防止僵死 修改自 : http://www.nczonline.net/blog/2009/08/11/timed-array-processing-in-javascript/ */ function timedChunk(items, process, context, callback) { var index = items.getCount() - 1; var total = index; setTimeout(function () { var start = +new Date(); do { //console.log(index); maskMessage.innerHTML = ("current step remain : " + ((index * 100) / total).toFixed(1) + "%"); process.call(context, items.item(index)); index--; } while (index >= 0 && (+new Date() - start < 50)); if (index >= 0) { setTimeout(arguments.callee, 25); } else { callback(items); } }, 25); } var maxScrollWidth = -1; //设定固定布局,防止自动撑破 Ext.select("table.fc").setStyle({ "table-layout": "fixed" }); //为固定布局设置宽度 var tbody = Ext.DomQuery.selectNode("table.fc > tbody"); var firstTds = Ext.get(tbody).select(" > tr:first-child td"); var widths = [2, 45, 5, 2, 45]; firstTds.each(function (el, _tds, index_) { el.setStyle({ width: widths[index_] + "%" }); }); var trs = Ext.get(tbody).select("> tr", true); timedChunk(trs, function adjustDiff(el) { for (var i = 0; i < 2; i++) { var turn = i ? (5) : 2; //console.log(el); var cel = el.child(">td:nth-child(" + turn + ")"); //console.log(cel); cel.dom.style.overflow = "hidden"; cel.dom.innerHTML = "<div>" + cel.dom.innerHTML + "</div>"; //里层文字div不允许换行 Ext.get(cel.dom.firstChild).setStyle({ "white-space": "nowrap" }); //外层滚动条div,隐藏滚动条,注意 td 出不来滚动条 //ie6 td 内 div 设置 width 100%,才能完全填充 td Ext.get(cel.dom.firstChild).wrap({ tag: 'div', cls: 'code', style: { "overflow": "hidden", width: "100%" // for ie6 } }); //获取外层滚动的最大宽度 var cur = cel.dom.firstChild.scrollWidth; if (maxScrollWidth < cur) { maxScrollWidth = cur; } } }, null, setDiff); function setDiff() { timedChunk(trs, function (el) { for (var i = 0; i < 2; i++) { var turn = i ? (5) : 2; var cel = el.child(">td:nth-child(" + turn + ")"); var cur = cel.dom.firstChild.scrollWidth; //将文字div设置为所有格子最大滚动宽度,使得可以统一滚动 if (maxScrollWidth > cur) { cel.dom.firstChild.firstChild.style.width = maxScrollWidth + "px"; } } }, null, createScroll); //最后一行显示的滚动条创建,ie会根据宽度设置自动出现滚动条,firefox不会,只能设置scroll function createScroll() { Ext.DomHelper.append(tbody, { tag: "tr", cn: [{ tag: "td", html: ' ' }, { tag: "td", cn: [{ tag: 'div', id: "scrollDiv0", cls: 'code', style: { "overflow-x": "scroll", //for firefox width: "100%" // for ie6 }, cn: [{ tag: "div", html: ' ', //for firefox style: { width: maxScrollWidth + "px" } }] }] }, { tag: "td", html: ' ' }, { tag: "td", html: ' ' }, { tag: "td", style: { //"overflow-x":"scroll" }, cn: [{ tag: 'div', id: "scrollDiv1", cls: 'code', style: { "overflow-x": "scroll", //for firefox width: "100%" // for ie6 }, cn: [{ tag: "div", html: ' ', //for firefox style: { width: maxScrollWidth + "px" } }] }] }] }); //当底层滚动条滚动时,所有格子的滚动条都一起滚动,造成同一列属于一个整体的假象 var scrollCells = Ext.select(".code"); for (var i = 0; i < 2; i++) { var lsDiv = Ext.get("scrollDiv" + i); lsDiv.on("scroll", (function (i) { return function () { var srollDiv = this; scrollCells.each(function (el) { el.dom.scrollLeft = srollDiv.dom.scrollLeft; }); } })(i)); } Ext.getBody().unmask(); } } });
发表评论
-
continuation, cps
2013-09-12 16:49 2791起 随着 nodejs 的兴起,异步编程成为一种潮流 ... -
一种基于匹配回朔的 css3 选择器引擎实现
2013-05-07 20:40 3401一种基于匹配回朔的 css3 选择器引擎实现 介绍 C ... -
cubic-bezier 模拟实现
2013-01-05 16:34 14089cubic-bezier 曲线是 css3 动画的一个重要基石 ... -
构建前端 DSL
2012-10-11 22:10 5359目前在传统的软件开 ... -
Get cursor position and coordinates from textarea
2012-04-10 20:50 5035最近需要从 textarea 中获 ... -
兼容 ie 的 transform
2012-02-23 14:00 6424css 2d transform 是 css3 引入的一个新的 ... -
promise api 与应用场景
2012-02-07 17:34 7375promise 是 commonjs 社区中提出的异步规范,其 ... -
closure compiler 代码优化实例
2012-01-08 03:23 2829closure compiler 可以进行不少有意思的优化 ... -
write html parser
2011-12-01 02:48 2916首先需要声明 html 不能用正则表达式来直接匹配进行内容抽取 ... -
获取剪贴板数据
2011-11-07 23:31 6446兼容性: 获取剪贴板数据这块各个浏览器间存在很大的 ... -
url 映射问题
2011-11-07 21:52 3221背景 url mapping 我最早知道是作为 j ... -
tip:如何原生播放声音
2011-10-19 12:45 2977如果不想考虑浏览器间 ... -
转载:瀑布流布局浅析
2011-09-29 19:02 2845简介 如果你经 ... -
cross domain request
2011-09-29 18:39 2845场景 跨域请求是随着 ... -
基于多继承的树设计
2011-09-18 03:42 2268分类 树是一种常见 ... -
caja 原理 : 前端
2011-09-01 16:48 7047作为前端开放的基础安全保证,caja 是目前比较合 ... -
tokenization of html
2011-08-29 22:38 2786html 符号解析问题 场景: 在页面上输出包 ... -
ie 下 cloneNode 导致的属性克隆
2011-08-24 16:10 2475这个还是很值得记下,一直存在的很大隐患终于解决,由于在 ie& ... -
循环引用下的深度克隆
2011-08-04 20:39 2305深度复制和浅度复制 是当初初学 c 遇到的第一批问题,似乎使 ... -
模块的静态与动态循环依赖
2011-07-25 03:43 3278场景: 循环依赖 我是不支持的,但现实中似乎又确实需 ...
相关推荐
《Beyond Compare 3.3.8:代码对比与文件管理利器》 Beyond Compare,简称BC,是一款由Scooter Software公司开发的专业级文件和文本对比工具。它以其强大的功能、直观的操作界面以及高效的对比算法,深受程序员和...
beyondcompare加入右键菜单方法 Beyond Compare是一款功能强大的文件比较工具,它可以帮助用户快速比较和同步文件。但是,默认情况下,Beyond Compare并不提供直接在右键菜单中访问的功能。这就需要用户手动打开...
该文件里有2个压缩包:BC3ShellExFix.zip + BC4ShellExFix.zip,分别是Beyond compare3和Beyond compare4的右键菜单修复方法,具体如下: 这里介绍Beyond compare4,在32位PC机上的右键菜单修复方法: 1)先把BC4...
最后,"BeyondCompare"可能是主程序的快捷方式或者配置文件。 总之,BeyondCompare系列是IT专业人士的强大助手,通过熟练掌握并运用这些工具,可以极大地提高文件管理和协同工作的效率。无论你是开发者、系统管理员...
**Beyond Compare:一款强大的文件与文件夹比较工具** Beyond Compare是一款功能强大的文件和文件夹比较工具,被广泛应用于软件开发、数据同步、版本控制等多个领域。它的主要特点是界面直观、操作简便,能够快速...
《Beyond Compare 3:强大的文件与文本比对利器》 Beyond Compare 3,这款软件以其高效、精准的文件和文本比对功能,在IT行业内赢得了广泛的赞誉。它是一款专业的比较工具,能够帮助用户在多个层面进行内容比对,...
在IT领域,尤其是在软件使用和优化的过程中,有时我们需要对系统进行一些特定的调整来解决特定问题或提升性能。本文将详细讲解如何删除Beyond Compare 4(一款强大的文件和文本比较工具)注册表里的CacheID值,以及...
Beyond Compare是一款功能强大的文件和文本比较软件,它能够帮助用户直观地对比两个文件夹或文件之间的差异,并提供合并冲突的功能。本问题涉及到的是一个特定的使用问题,即“Beyond Compare左键不显示比较项”,这...
《文件比较神器:BeyondCompare V3.3.13深度解析》 在IT行业中,文件对比是一项基础且至关重要的任务,无论是代码版本控制还是数据比对,都需要精准地找出文件间的差异。这时,一款强大的文件比较工具就显得尤为...
标题“Beyond compare(已经配置好class反编译,解压可用)”暗示了该压缩包包含的Beyond Compare版本可能已经预先配置好了对.class文件的反编译支持。.class文件是Java字节码文件,通常由Java源代码编译而来。通过反...
**Beyond Compare:一款强大的文件与文本比较工具** Beyond Compare,中文名“超级对比”,是一款功能强大的文件和文件夹比较工具,被广泛应用于软件开发、数据同步、版本控制等多个领域。这款软件以其直观的用户...
BeyondCompare3.34 安装包
《Beyond Compare 4:深入解析与使用指南》 Beyond Compare 4是一款强大的文件和文本比较工具,由Scooter Software公司开发。它以其直观的界面、高效的功能和广泛的用途赢得了广大用户的喜爱。本文将深入探讨Beyond...
Beyond Compare 4 中文版入门教程参考 Beyond Compare 4 是一款智能且专业的文件夹和文本比较工具,它可以帮助用户快速地比较和合并文件,找出差异,生成文件报告。以下是 Beyond Compare 4 中文版的入门教程。 ...
Beyond Compare 5中文最近版本的安装与激活
BeyondCompare是一款广受欢迎的专业级文件和目录比较工具,由Scooter Software公司开发。这款软件以其强大的功能和直观的用户界面赢得了众多用户的喜爱。在本文中,我们将深入探讨BeyondCompare Pro 4.2.6.23150 x64...
Scooter Beyond Compare is basically considered to be a concentrated beyond compare which permits the user on developer in order to compare the user folder as well as files efficiently and easily....
《Beyond Compare 2:软件比较与开发神器》 在IT行业中,版本控制和代码管理是开发者日常工作中不可或缺的一部分。为了确保代码的质量和一致性,开发者需要有效地比较和合并代码。这时,一款强大的比较工具就显得至...
### Beyond Compare 文件比对常规操作详解 #### 一、Beyond Compare简介 Beyond Compare是一款功能强大的文件及文件夹对比工具,支持多种格式文件的对比及合并,适用于开发人员、系统管理员等专业人士。它可以帮助...
重新打开beyond comare ...C:\Users\wdd\AppData\Roaming\Scooter Software\Beyond Compare 4\Helpers\Java\CLASS_to_JAVA.bat 修改为java -jar Helpers\Java\procyon-decompiler-0.5.36.jar %1 > %2