RSS
people

区别中英文截取字符

最近很忙,博客很久没有更新了,今天抽出了一点闲暇时间,动手写了这个“区别中英文截取固定字符”的jQuery插件,暂且命名为fixtext吧,相信前端的兄弟们,这种情况会经常遇到,但是一直找不到太完美的解决办法,通常下用css截取,但是css有弊端,最令人不满意的是,限定宽度后有可能会截掉不完整的字符,相当的不雅,后台截取当然最好,但是多数情况下PD不一定愿意干这个活。今天特意写了这个插件,基本能满足大家的工作需要了,包括中英文混排的文字,并且可以区分UTF-8,和GB2312,这样大家应该清楚,中文的编码不一样占的字符也是不一样的,UTF-8占了三个字符,而GB2312占了两个字符,另外还包括一个非常实用的功能——是否保留省略号,用起来还算方便吧。
fixtext插件源码:

/*
* fixtext 0.1
* Copyright (c) 2010 Rainboy http://www.rainboys.cn/
* Date: 2010-07-26
* 区别中英文截取字符
*/
(function(){
$.fn.fixtext=function(options){
var defaults={
ellipsis:true,
maxLen:"15"
}
var options = $.extend(defaults, options);
this.each(function(){
var fixobj=$(this);
//判断网页的编码方式,如果是UTF-8那么一个汉字就占3个字符,如果GB2312一个汉字占2个字符
var webcode;
webcode=(document.characterSet)?document.characterSet:document.charset;
incre=(webcode.toUpperCase()=="GB2312")?2:3;
var currentStr="";
var text=$(fixobj).html();
var textlen=text.length;
//判断是否保留省略号
options.maxLen=(options.ellipsis)?options.maxLen-2*incre:options.maxLen;
for(var i=0,len=textlen;i<len; i++){
currentStr+=text.charAt(i);
if(getCharLength(currentStr,incre)>options.maxLen){
//不保留里省略号的文字内容
text2=text.substr(0,i);
//保留里省略号的文字内容
if(options.ellipsis){text2=text2+"……"}
$(fixobj).html(text2);
return;
}
else{
$(fixobj).html(currentStr);
}
}
//计算截取字符的长度
function getCharLength(str,incre){
var charLen=0;
for (var i=0,len=str.length; i<len; i++){
if(str.charCodeAt(i)>255){
charLen+=incre;
}
else{
charLen+=1
}
}
return charLen;
}
})
}
})(jQuery)

引用脚本

$(要截取的对象).fixtext({ellipsis:false,maxLen:"20"});

这里面包括了两个参数ellipsis和maxLen,顾名思义,ellipsis它就是决定是否保留省略号的,当他的参数是“true”的时候,就保留省略号,“false”时就不保留省略号,maxLen就是截取的字符长度,有一点提醒一下大家,maxLen包括省略号的长度,比如要截取20个字符,并且保留省略号,如果页面编码是GB2312,那么截取的字符就是16个。插件的源代码就不解释了,注释已经很详细了。童鞋们使用过程中遇到了问题的话,请给我留言!欢迎大家来交流!

Demo : http://www.rainboys.cn/demo/fixtext.html

插件下载地址:http://www.rainboys.cn/demo/js/fixtext.js

3 Comments | Tags: , ,

让页面变得更快一点

Web页面运行在各种各样的浏览器当中,浏览器载入、渲染页面的速度直接影响着用户体验。非常不幸的是,效率最低的IE浏览器仍然占领者绝大多数市场份额,这已经严重制约了互联网的发展(感叹一下:“马赛克和IE——阻碍人类文明发展的绊脚石!”)。

简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程。先来大致了解一下浏览器都是怎么干活的:

  1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件;
  2. 浏览器开始载入html代码,发现<head>标签内有一个<link>标签引用外部CSS文件;
  3. 浏览器又发出CSS文件的请求,服务器返回这个CSS文件;
  4. 浏览器继续载入html中<body>部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了;
  5. 浏览器在代码中发现一个<img>标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码;
  6. 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码;
  7. 浏览器发现了一个包含一行Javascript代码的<script>标签,赶快运行它;
  8. Javascript脚本执行了这条语句,它命令浏览器隐藏掉代码中的某个<div>(style.display=”none”)。杯具啊,突然就少了这么一个元素,浏览器不得不重新渲染这部分代码;
  9. 终于等到了</html>的到来,浏览器泪流满面……
  10. 等等,还没完,用户点了一下界面中的“换肤”按钮,Javascript让浏览器换了一下<link>标签的CSS路径;
  11. 浏览器召集了在座的各位<div><span><ul><li>们,“大伙儿收拾收拾行李,咱得重新来过……”,浏览器向服务器请求了新的CSS文件,重新渲染页面。  read more »

1 Comment | Tags: ,

【转】jQuery类对象数组操作

我们都知道jQUery对象中有一个类数组的元素包装集,该集合类似js中的数组一 样拥有length属性,因此我们称此为类数组,下面我们就来总结下这个jQuery对象中的类数组时如何进行操作的,看看我们的jQuery为我们都提 供了哪些可用的方法:

size():很明显,它应该是返回包装集中的元素个数,如$(‘a’).size()表示链接元素的个数;

get(index):当没指定index时就默认取包装集中所有元素,并以js中的数组形式返回,如果指定了index,则返回下标为 index对应的元素,如$(‘img[title]‘).get(0)返回包含属性title的第一个img元素,其也等效 于$(‘img[title]‘)[0];

index(elem):在包装集中返回元素elem所在的下标,如果没找到该元素则返回-1;

add(String|elem|Array):把参数中的元素添加到包装集中,如果参数是jQuery选择器,那么将把所有匹配的对象都添 加到集合中,如果是html元素那就通过clean方法得到的元素数组添加到集合中,如果是dom元素或dom元素数组,那就直接添加到集合了;注意返回 的是添加后的包装集;如$(‘img[alt]‘,’img[title]‘)等效于$(‘img[alt]‘).add(‘img[title]‘)即 返回包含了alt属性的img元素或包含了title属性的img元素; read more »

4 Comments | Tags: ,

使用YUI Compressor压缩合并CSS/JS

今天看了淘宝改进的Compressor感觉还不是很方便,虽然可以可视化的操作了,不用输那么一长串的文件名,但是不能合并多个文件,所以没有根本上解决问题,所以继续寻找,好在找个找到了这个老兄的办法。自己做一个bat文件,和一个需要合并的文件列表(txt)。先合并列表中的所有文件,然后再用yuicompressor压缩文件。具体方法如下: read more »

No Comments |

Jquery语法总结和注意事项

1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:

$(document.getElementById("msg"))

则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:

$("#msg")[0],$("div").eq(1)[0],$("div").get()[1]
$("td")[5] 

这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:

$("td")# $("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;

read more »

No Comments | Tags: ,

javascript 闭包(Closure)初探

closure被翻译成“闭包”,感觉这东西被包装的太学术化。下面参考书本和网上资源简单探讨一下(理解不当之处务请留意)。
1、什么是闭包
官方的回答:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。
看了上面的定义,如果你不是高手,我坚信你会和我一样愤怒的质问:这tmd是人话吗?
要理解闭包,还是代码最有说服力啊,上代码:

function funcTest()
{
  var tmpNum=100; //私有变量

  //在函数funcTest内定义另外的函数作为funcTest的方法函数
  function innerFuncTest(
  {
       alert(tmpNum); //引用外层函数funcTest的临时变量tmpNum
  }

  return innerFuncTest; //返回内部函数
}

//调用函数
var myFuncTest=funcTest();
myFuncTest();//弹出100

上面代码中,注释已经写的清清楚楚。现在我们可以这么理解“闭包”:在函数体内定义另外的函数作为目标对象的方法函数(示例中就是在函数funcTest内定义另外的函数innerFuncTest作为funcTest的方法函数),而这个对象的方法函数反过来引用外层函数体中的临时变量(闭包是一种间接保持变量值的机制。示例中就是内部函数 innerFuncTest引用外层函数funcTest的临时变量tmpNum,这里必须注意,临时变量可以包括外部函数中声明的所有局部变量、参数和声明的其他内部函数)。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包(示例中,调用函数的时候,myFuncTest实际调用的是innerFuncTest函数,也就是说funcTest的一个内部函数innerFuncTest在 funcTest之外被调用,这时就创建了一个闭包)。 read more »

No Comments | Tags: ,

IE的经典错误

今天更新了公司网站后出现了诡异的错误“无法打开Internet站点 已终止操作”的错误“一时间找不到错误的原因,后来上网搜了一下才发现这是ie的经典错误;发现自己还是菜鸟一只。菜鸟最这些错误做一个总结!

<iframe src="javascript:'<script>top.ff1={abc:function(){}}< /script>'" width=0 height=0 name="f1"></iframe>
<button onclick="f1.location='about:blank';setTimeout('alert(ff1.abc())',0)">不能执行已经释放的代码</button>

<iframe src="javascript:'<script>top.ff2={abc:function(){}}< /script>'" width=0 height=0 name="f2"></iframe>

<button onclick="f2.location='about:blank';setTimeout('
alert(ff2.toString())',0)">意外地调用了方法或属性访问</button>

p标签的innerHTML不能插入center标记:

<p onclick="innerHTML='<CENTER>'"><button>
未知的运行时错误</button></p>

下面这个是经典的“无法打开Internet站点”异常:

<div id="tt"><div><script>
document.getElementById("tt").innerHTML=""</script></div></div>

不过我今天的这个错误应该是页面还没有加载完全时,执行的JS就创建出新的DOM结点了,致使DOM树的结构发生紊乱造成的
解决方案如下

if(!DWS.BV.isIE){//非IE浏览器直接初始化
init();
} else {
//IE下,防止浏览器提示“internet explore 无法打开internet站点 已终止操作”
if (document.readyState=="complete"){
init();
} else {
document.onreadystatechange=function(){
if(document.readyState=="complete")init();
}
}
}

No Comments | Tags: , ,

jQuery对象与dom对象

1、关于页面元素的引用

通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换

只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:$(document.getElementById(“msg”))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$(“#msg”)[0],$(“div”).eq(1)[0],$(“div”).get()[1],$(“td”)[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html();
$("#msg")[0].innerHTML;
$("#msg").eq(0)[0].innerHTML;
$("#msg").get(0).innerHTML;
read more »

No Comments | Tags: ,

转载【jQuery性能优化指南】

现在jquery应用的越来越多, 有些同学在享受爽快淋漓coding时就将性能问题忽略了,? 比如我.? jquery虽在诸多的js类库中性能表现还算优秀, 但毕竟不是在用原生的javascript开发, 性能问题还是需要引起重视的. 在twitter上发现了<jQuery Performance Rules>这篇文章, 简单的摘译了一下:

  1. 总是从ID选择器开始继承
  2. 在class前使用tag
  3. 将jquery对象缓存起来
  4. 掌握强大的链式操作
  5. 使用子查询
  6. 对直接的DOM操作进行限制
  7. 冒泡
  8. 消除无效查询
  9. 推迟到 $(window).load
  10. 压缩js
  11. 全面掌握jquery库

1. 总是从ID选择器开始继承

read more »

No Comments | Tags: ,

240多个超实用的jQuery插件推荐

概述

jQuery 是继 prototype 之后又一个优秀的 Javascript 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不jquery及的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理 HTML documents、events、实现动画效果,并且方便地为网站提供 AJAX 交互。 jQuery 还有一个比较大的优势是,它的文档说明很全,而且各种应用也说得很详细,同时还有许多成熟的插件可供选择。 jQuery 能够使用户的 html 页保持代码和 html 内容分离,也就是说,不用再在 html 里面插入一堆js来调用命令了,只需定义 id 即可。今天在Kollermedia.at上发现了一篇JQuery插件列表的文章,特推荐如下。 read more »

No Comments | Tags: ,