随笔-16  评论-163  文章-1  trackbacks-2
  2012年2月20日

作者:Paul Anthony 原文:http://blog.webdistortion.com/2008/03/09/9-of-the-best-rich-text-editors-reviewed/

--------------------------------------------------------------------------------------------

每次我开始一个新的WEB项目,我都会想哪个文字编辑器更适合我用,然后不断地在网络寻找,每次都去寻找适合需求的编辑器实在是浪费时间,所以我现在把一些再好不过的编辑器列举在这里,不为别的,只为能为自己带来一点方便而已。 而且我随时会把一些新发现的优秀的开源编辑器添加在这里 。

NiceEdit
http://nicedit.com/

NicEdit已在过去的几个月里被创建为一个取代那些复杂的文本编辑器的产品,如替代TinyMCE和FCKEditor ,他们包含许多文件并且尺寸很大的( 超过 200KB )。 它实现了许多上述复杂编辑器所具有的标准功能,但这些仍然可以容易地集成,而且文件体积也没有增大。不幸的是,它尚未提供XHTML清理功能,所以会为您的用户产生一些过时的HTML,对您网页的W3C校验会产生影响,并可能使您的代码看起来令人作呕。

特征

* 文件大小“ 35KB合计”, 压缩后才10KB!
* 只需2个文件(js+icon)既能运作。
* 灵活的配置使您更方便地替换textareas或divs
* 多个编辑器可以选择使用同一控制器
* 可以通过AJAX或HTTP提交保存数据
* 兼容IE 5.5+ / FF 2+ / Opera 9+ / Safari 3+ 
 

 

Kupu
http://kupu.oscom.org/download/

Kupu更多的使用CSS来使HTML编排和版面设计更加优秀。 它支持把数据异步保存到服务器,它在程序代码中设置事件处理句柄,而不是从HTML (工具栏除外)中 ,这使得代码清洁了很多。 它使用DOM功能来建立HTML 。 在各方面它都尝试采用所支持浏览器的最先进的标准技术,以确保良好的用户体验和产生干净的代码。

有多种方法可以定制和扩展kupu。 对于简单的修改可以通过改配置文件来实现,而按钮,工具和布局可以通过改变CSS来实现 。对于较大的修改,可以使用它提供的一些javascript api来实现,当然这些api非常简洁和稳固,允许您发挥最大的自由度。

 特征

* 图像上传的图片浏览器
* 为浏览器增强了“out-of-the-box”支持
* 为图像的CSS浮动提供了支持
支持全屏编辑
* 增加了BeforeUnload事件处理器

 

TinyMCE
http://tinymce.moxiecode.com/

 

类似许多其他的的富文本编辑器的收费模式,TinyMCE对图像和文件管理器功能收取一定费用。 如果您需要使用免费的上传功能,建议您使用kupa。 有一些另外的插件做这些事情。TinyMCE的功能极其丰富,它可以配置为XHTML工作模式。这些文件是非常全面的两个特点。 这是WordPress的武器选择,但神我希望他们会改变它象一对夫妇的其他人谁也遇到了问题,在某些主机环境TinyMCE 。

特征

* 易于集成,只需要两行代码。
* 可通过主题和插件定制。
* 定制的XHTML 1.0输出。 块无效的内容和力量属性。
*国际语言支持(语言包)
* 支持多种浏览器, Mozilla, MSIE , Firefox , Opera及Safari浏览器(测试) 。
* 的PHP / .NET / JSP技术/ Coldfusion gzip格式压缩压缩机,使TinyMCE 75 %的体积更小,速度更快了很多加载。
* 您可以很容易地使用AJAX保存和加载内容!

Kevin Roth RTE

http://www.kevinroth.com/rte/

 

虽然文本编辑器已经出现很多年了,它是这款编辑器仍然觉得有点过时和低级,无论是它的皮肤还是其他特点。 该款编辑器代码笨重,尽管能够生成的XHTML代码,但是却没有任何余地去编辑样式,这意味着其自带的很多内联CSS风格可能会消除您的一些字体设置。

特征

* 支持表格
* xhtml兼容代码
* IE 5.5以上
*  Mozilla的1.3 +
* 火狐0.6.1 +
* Netscape 7.1及更高版本
* Mac Safari 1.3
* Opera 9+

 

posted @ 2012-02-20 12:52 lola 阅读(87) 评论(0) 编辑
  2011年5月20日

  我们知道,js的数组具有一个sort方法,这个sort方法还可以传入一个特定形式的比较函数进行自定义排序,它的用法类似这样:

[5,4,9,2,7].sort(function(a,b){return(a-b);});

这个特定形式的自定义比较函数,要求有两个参数,通常情况下,函数的内容是两个参数本身或其属性的对比,该函数的返回值必须为负数、0和正数之一。另外sort函数会改变数组,而不是返回一个新的数组。

 

  最近我的一段js代码使用了js数组的自定义排序,在ie8和ff4下正常,然而在ie6和ie7下报“缺少数字”错误,经过研究发现,是自定义比较函数的返回值出现了NaN这个非数字造成的,这种情况下,ie6和ie7直接报错,而ie8和ff4不会报错,如下的代码可以可以重现这个问题:

    var arr = [
        {o:
3,toString:function(){return this.o}},
        {o:undefined,toString:
function(){return this.o}},
        {o:
4,toString:function(){return this.o}},
        {o:
1,toString:function(){return this.o}}
    ];
    arr.sort(
function(a,b){return a.o-b.o;});//使用元素的o属性进行比较
    
    debug.innerHTML
=arr;

由于数组arr中有一个元素的o属性没有定义,因此比较函数中会出现数字与undefined相减的情况,结果就是NaN,于是ie6和ie7报错了,截图如下:

 

 

  解决这个问题的办法,就是避免自定义比较函数返回非数字。但是ie8为什么不报错呢?难道ie8下传给sort函数的比较函数返回NaN不抱错吗?答案是肯定的,当比较函数的返回值为NaN的话,ie8不会报错,但是排序结果会发生一些不可预料的变化,上面同样的代码,在ie8下的结果是:

1,3,undefined,4

这个结果令我疑惑,如果把arr改成:

var arr = [
        {o:
3,toString:function(){return this.o}},
        {o:
6,toString:function(){return this.o}},
        {o:undefined,toString:
function(){return this.o}},
        {o:
4,toString:function(){return this.o}},
        {o:
1,toString:function(){return this.o}}
    ];

则排序后结果是:

1,3,4,6,undefined

 如果我把o属性未定义的元素移到o属性为3的元素下面,则返回结果是:

1,3,undefined,4,6

这正是我的疑惑,如果你知道答案,请不吝赐教。

 

  那么ie8的sort的自定义比较函数是不是无论返回什么都不报错呢?答案是否定的,如果我把比较函数的返回值硬编码成“return “#@#@””,则ie8也报错了:

 

 

   因此,我认为ie8的的sort函数,相比IE6和ie7,至少进行了体验上的优化,即如果发现自定义比较函数的返回值是NaN,则不报错,只是排序可能会出现非预期的结果而已,但是如果返回值是字符串,则将严惩不贷,弹出令人震惊的错误框。

 

 

posted @ 2011-05-20 16:39 lola 阅读(191) 评论(0) 编辑
  2009年10月31日

  关于视野,我以前就有很多想法,因为我经常由于视野不宽而走弯路,因此觉得视野太重要了,比智商和技术更重要。

  我以前做ajax应用的时候不知何为异步何为同步,更不知何为回调,总觉得程序应该是一条一条执行下去的,上一语句还在执行的时候不可能会执行下一语句的,因此在写xmlhttp的时候,总是不知道把async属性设为true,而是按部就班地先发出请求,然后等待返回的结果,当时还纳闷说,ajax这么流行的东西怎么这么卡呢?后来深入了解ajax之后就知道,使用同步模式,只要你的请求还没被返回,你就要一直等待,这段时间你的鼠标不能动,滚动条不能动,也就是“阻塞”了,能不觉得“卡”吗!

  当时只从书上知道xml是国际通用数据交换格式,因此用xml交换数据,把数据库的记录转换成xml,再发到客户端,客户端用xmldom去解析,现在才知道相对于json,这是多么笨拙和缓慢的办法,如果早点了解ORM,了解json序列化,以后又怎么会再花大力气去重构以前那些丑陋的应用。

  还有些其他人的例子,比如我有个同事,为了让用户关闭浏览器就会话失效,打算把项目从cookie存储身份信息换成session,而事实上只需把form验证的某个配置改为false即可,如果身边没有同事告知,多少的劳动力又浪费在这些弯路上了?

  刚才还看到一片博文,博主说看到某C#函数中的参数前有this关键字,于是百思不得其解,便做了个小程序去测试,百转千回终于发现那个类下面多了这个方法,事实上这就是C# 3.0中新增的“扩展方法”机制,如果博主在一两年前C# 3.0发布的时候稍微了解下这些新特性,又何必对这个参数前的this大惊小怪,不过本人非常敬佩该博主的专研精神和工作学习的态度。 

  技术可以让您做出来,比如做聊天室,视野窄的用定时刷新页面,稍好点的会用ajax轮询,而视野更广的会用comet长轮询,技术是实现了,但是视野的宽度决定了产品是否具有先进,越有先进性,那么被淘汰的概率也小,而那些因为视野窄而使用并不优越的方法做出来的东西,不但以后可能要重构,还可能被淘汰。

  视野的建立不是一蹴而就的,相反正是在缺乏视野的跌跌撞撞中才会扩大人的视野,有的人接触的东西少,想依赖实践去扩大视野显然是相当慢的,因此就要多多学习了,我以上举的几个例子,如果主人公在实践之前就掌握了扎实的WEB编程理论知识,就会少走许多弯路。

  千言万语汇成一句话,没事多学学,多去技术社区看看,多去英文网站看看,多关注下新技术、新动态,当你的精力有限时,不必了解某种技术具体怎么去用,但是应该了解这种技术有什么优点和缺点,适应什么场合。

posted @ 2009-10-31 13:15 lola 阅读(1635) 评论(9) 编辑
  2009年9月18日

  看到易建联要打全运会的消息,其实以前已经有媒体爆料零星消息,但是现在还是感到气愤,因为我是体育迷,尤其是足球迷,篮球也喜欢打,我深知中国运动员的体育环境是多么的恶劣
虽然看起来夺金夺银是一件好事,但是这种金牌银牌是建立在对运动员的高压之上的。

  这个世界上没有纯粹的国家利益和集体利益,国家利益和集体利益的本质应该是人民的利益,国家荣誉或者集体荣誉的获得也不应该损害个人的权利和自由,但是在某国,国家或集体利益实际上变成了某组织某官员的个人利益。

  找教练首先是找没个性、听话的,看看排球和篮球的教练,而且还都是任命制,阿根廷足球队的主教练马拉多纳虽然现在执教水平被炮轰,但是好歹是世界足球的响当当的人物,而中国女排的教练,不但一脸衰样,而且人是从哪里冒出来都不知道。

  看看中国的篮球,为了夺个什么狗屁亚洲冠军,只差没跪在姚明面前喊爷爷;某个省,为了全运会,居然叫NBA的人来打球;而日本足球,在亚洲杯的时候就主要以青年球员为主,夺不夺冠并不重要,日本足球队还加入到美洲杯,和厄瓜多尔、巴西、阿根廷、巴拉圭打比赛,为了就是真正提高足球水平。而中国篮球,完全不为以后,只为眼前的金牌银牌,只为某个官员在位的政绩,运动员层次基本上是青黄不接,上次亚锦赛,派了个青年队,好歹也是CBA中的主力或主力替补吧,居然排到了倒数,所以这次亚锦赛,把所有的牛人都召集来了,结果也是个第二
而且很多比赛都是只赢两三分,如果换做在客场,打进4强都要靠某官员祖坟上冒几缕青烟了。

  中国官员玩权术、讨好上级、压榨下级,欺压百姓、粉饰太平的手段世界一流,而运筹帷幄的能力、眼光和视野基本上停留在原始社会时期,我相信中国的篮球迟早会变成亚洲第5名之后,逐渐向国足看齐。

  奥运会前夕法国不是有一组图片,官方描述是:“辱华”广告包含了三张图片,选用了射箭、游泳、举重这三个项目的画面,借奥运体育项目来影射中国虐待囚犯。某组织首先转移矛盾,本来该系列图片是影射某组织是如何对待运动员的,但是某组织故意把该图片说成是“辱华”,谋求舆论支持,事实上,作者根本无心和中国人民过意不去,只是想揭露某组织而已,图片虽然有点夸张,但是反映的问题确实深刻的,那就是某组织为了穿金夺银为了政绩,基本上是视运动员为奴隶。

  印度人口众多,但是印度好像在去年才拿过历史上第一块金牌,印度人很瘦弱吗,不是的,印度女人大部分都很丰满,和朝鲜人不是一个档次,男人也瘦弱不到哪里去,论人种,可能比中国人还强壮一些,但是印度政府并没有像某组织一样,为了所谓的国家荣誉,赶鸭子上架,去满足某些虚荣感,人家脚踏实地,不行就不行,体育基础设置差,国家队拿得金牌银牌再多,也只是打肿脸充胖子而已;其实中国完全是个体育弱国,比先天性的,没有欧美和非洲人强壮,没有拉丁美洲人的灵活和速度,比后天性的,中国的体育设施和体育经费估计也只能排在全球排名的中下位置论遭受疾病的概率,基本上只比非洲好一些,论抵抗能力,也好不到哪里去,电视上70%的广告,尤其是地方台,都是医药医院广告,由此可见一斑。

  因此中国在奥运会金牌榜排在前几位,完全是个泡沫,并非中国体育的真实写照。而美国、西班牙,篮球足球都是世界一流,伊朗的篮球和足球也是亚洲一流,他们才是真实的世界体育强国或亚洲体育强国。

  我为什么支持国足呢,国足踏实稳定,总是徘徊在世界100名左右,奥运会这么功利性的比赛,某些组织想让它不添堵,算盘也落空了,差归差,但是至少是真实水平的反映,国足踢球是职业化对职业化,成绩差技术不好职业化程度低也认了,而其他大多数项目,是全年训练的专业队对只有几天训练的业余队,成绩再好,也为人所不齿。

 

  那么中国的体育才有救了,否则,一切的金牌银牌都只是某个组织为了满足虚荣感而伪造的假货

posted @ 2009-09-18 19:02 lola 阅读(5) 评论(0) 编辑
  2009年8月21日

image

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace commonTest
{
    
public partial class recursionTree : System.Web.UI.Page
    {
        
protected void Page_Load(object sender, EventArgs e)
        {
            CreateChildByPath(TreeView1, 
"生物/植物/陆生植物");
            CreateChildByPath(TreeView1, 
"生物/植物/水生植物/荷花");
            CreateChildByPath(TreeView1, 
"生物/微生物/酵母菌");
            CreateChildByPath(TreeView1, 
"生物/动物/节肢动物门/棉蚜");
        }

        
/// <summary>
        
/// Creates the child by path.
        
/// </summary>
        
/// <param name="tv">The tv.</param>
        
/// <param name="root">The root.</param>
        
/// <param name="valuePath">The value path.</param>
        
/// <returns>返回最后创建的那个结点</returns>
        protected TreeNode CreateChildByPath(TreeView tv,  string valuePath)
        {
            TreeNode lastNode 
= tv.FindNode(valuePath);
            
if (lastNode != null)
            {
                
return lastNode;
            }
            
else
            {
                
int lastSep=valuePath.LastIndexOf("/");
                
string parentValuePath = lastSep == -1 ? valuePath : valuePath.Remove(lastSep);
                
string myValue = valuePath.Substring(lastSep + 1);

                TreeNode parentNode 
= CreateChildByPath(tv, parentValuePath);
                TreeNode my
=new TreeNode(myValue,myValue);
                parentNode.ChildNodes.Add(my);

                
return my;
            }
        }
    }
}
posted @ 2009-08-21 19:10 lola 阅读(32) 评论(0) 编辑
  2009年8月15日
摘要: 前言:网上有不少文章是讲行转列的,但是大部分都是直接贴代码,忽视了中间过程,本人自己思考了下为什么要这样实现,并且做了如下的笔记,对有些懂的人来说可能没有价值,希望对还不懂的人有一点借鉴意义。对于有些业务来说,数据在表中的存储和其最终的Grid表现恰好相当于把源表倒转,那么这个时候我们就碰到了如何把行转化为列的问题,为了简化问题,我们且看如下查询出来的数据,您不必关心表的设计以及sql语句: 假设...阅读全文
posted @ 2009-08-15 14:36 lola 阅读(4683) 评论(7) 编辑
  2009年7月13日
摘要: 自从CSS出现以来,就有厂商希望CSS能够更加灵活一点,最早的CSS动态化体现为“动态表达式”(或动态属性,Dynamic attribute)的构想,动态表达式的构想也许是源自于以下的一些场景:  元素的尺寸或者位置由浏览器或者html文档来计算  使用变量作为style属性的值,比如频繁使用的颜色,用一个全局变量  包括浏览器的鼻祖Netscape以及IE浏览器都试图在...阅读全文
posted @ 2009-07-13 22:46 lola 阅读(1900) 评论(6) 编辑
  2009年6月5日
摘要: 今天早上,看到成都特大公交车自燃造成25人死亡的消息后非常震惊、悲痛和愤怒,震惊的是这是我听到过公交车自燃造成上网最惨重的事故了,悲痛的是25条人命就这样糊里糊涂的没了,愤怒的是为什么唯独是中国老是出这样的特大安全事故,我感觉有四个原因:中国的公交车公司缺乏创新、制造技术也很粗糙,缺乏严密的安全思维,自动报个火警会有这么难吗?还要“乘客鼻子闻到”才知道着火了?或者是报警器坏了,为什么这么容易坏?另外车窗设计的为什么不能灵活一点,比如受到猛烈撞击的时候自动打开,或者干脆就不必要封闭,弄个活页不行吗,空调车的车窗为什么要封的这么死防止乘客打开呢?人命重要还是防止泄露一点点冷气重要?何况谁吃饱了没事阅读全文
posted @ 2009-06-05 18:28 lola 阅读(233) 评论(0) 编辑
  2009年5月30日
摘要: 这篇文章是续《小巧优美的ORM框架-doodads入门指南》的,在上篇文章,我讨论了喜爱doodads的理由:轻巧,部署简单,文件少且小,开源免费简单,不支持关系映射,不支持多表操作,所有的实现必须您亲自写sql或建立视图来实现依赖存储过程,间接地提高性能不过,其官方网站宣称已经不再维护doodads了,尽管如此,如果您发现您的项目适合doodads而你暂时又没有找到其他的框架,另外学习时间有限的...阅读全文
posted @ 2009-05-30 19:40 lola 阅读(1885) 评论(9) 编辑
  2009年5月27日
摘要: 关于.net下的ORM框架,大家最为耳熟的可能就是NHibernate了,当然,很多公司正在使用自己开发的ORM框架,笔者至少见过3家不同公司的ORM框架,其实都是大同小异,借助于codesmith、mygeneration等代码生成工具,自己开发一个ORM框架也不是什么难事,关键的问题是,你能不能设计出代码优美简洁、功能灵活、定制方便以及部署容易的ORM框架。  我去年开始热衷NHibernat...阅读全文
posted @ 2009-05-27 23:59 lola 阅读(3118) 评论(30) 编辑
仅列出标题  下一页