请教:这函数什么地方不对

PerterPon 2011-07-14 12:15:59
整个页面的代码都贴上了,主要就是fun这个,enLength是用来判断是否是中文字符,其实这边是可以用asc来判断的,不过因为真正用到的话是cnLength这函数不只是判断中文字符,来说说fun()这函数,我想的是来判断textarea中输入的字符串,如果整个字符串长度小于36的话就直接输出,如果是大于36的话就进行判断,主要就是判断36个字节后如果还有字符的话就用省略号代替,现在这个有点问题,但是实在想不明白,请各位帮帮忙
<html>
<body>
<script type="text/javascript">
function cnLength(Str) {
var escStr = escape(Str);
var numI = 0;
var escStrlen = escStr.length;
for (i = 0; i < escStrlen; i++)
if (escStr.charAt(i) == '%')
if (escStr.charAt(++i) == 'u')
numI++;
return numI;
}
function fun()
{
t = document.getElementById("text").value.length + cnLength(document.getElementById("text").value);
alert(t);
if( t > 36)
{
var len = 0;
for(var i = 0; i < 36; i++)
{
if(cnLength(document.getElementById("text").value.substring(i,i + 1)) == 1)
{
len += 2;
}
if(cnLength(document.getElementById("text").value.substring(i,i + 1)) == 0)
{
len += 1;
}
if(len > 35)
{
break;

}
content = document.getElementById("text").value.substring(0,(i - 1) ) + "...";
}

}
else
{
content = document.getElementById("text").value;
}

alert(content);
}
</script>

<textarea id="text"></textarea>
<input type="button" onClick="fun()">
</body>
</html>


...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
PerterPon 2011-07-14
  • 打赏
  • 举报
回复
二楼理解错了,我没说清楚= =。。。 就是说如果大于36的话,这36是字节数不是字数,length出来之后是字数,然后最后如果大于36的话,就输出前36个字节的东西,包括中文和英文或者数字什么的,而不是把前36个字全都输出来
hongmei85 2011-07-14
  • 打赏
  • 举报
回复
<html>
<body>
<script type="text/javascript">
function cnLength(Str) {
var escStr = escape(Str);

var numI = 0;
var escStrlen = escStr.length;
for (i = 0; i < escStrlen; i++)
if (escStr.charAt(i) == '%')
if (escStr.charAt(++i) == 'u')
numI++;
return numI;
}
function fun()
{
t = document.getElementById("text").value.length + cnLength(document.getElementById("text").value);
alert(t);
if( t > 36)
{
var len = 0;
for(var i = 0; i < 36; i++)
{
if(cnLength(document.getElementById("text").value.substring(i,i + 1)) == 1)
{
len += 2;
}
if(cnLength(document.getElementById("text").value.substring(i,i + 1)) == 0)
{
len += 1;
}
if(len > 35)
{
break;

}
}
content = document.getElementById("text").value.substring(0,i+1 ) + "...";

}
else
{
content = document.getElementById("text").value;
}

alert(content);
}
</script>

<textarea id="text">你好abcdefghijklmlopqrstuvwxyz1234567890</textarea>
<input type="button" onClick="fun()">
</body>
</html>
挨踢直男 2011-07-14
  • 打赏
  • 举报
回复
if(txt.length<=36) txt1=txt
挨踢直男 2011-07-14
  • 打赏
  • 举报
回复
<html>  
<body>
<script type="text/javascript">

function fun()
{
var txt = document.getElementById("text").value;
var txt1 = "";
alert(txt.length)//长度;
if(txt.length<36) txt1=txt
else txt1 = txt.substr(0,36)+"..."
alert(txt1)
}
</script>

<textarea id="text"></textarea>
<input type="button" onClick="fun()">
</body>
</html>
PerterPon 2011-07-14
  • 打赏
  • 举报
回复
下午有事出去了额 3L的对了 原来是想错了 5L说的也很对 只不过现在已经能够完成我的功能 我先把任务完成 再回来研究下你的说法 感觉很不错
豆虫 2011-07-14
  • 打赏
  • 举报
回复
好像没有那么简单 其实LZ那么写也是有bug的 我的字符串里要是有%u这些特殊字符咋办?
汉字肯定是占6个字节的 其实我们可以把汉字替换成6个数字1 特殊处理下 再来截

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧