- 浏览: 916582 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (498)
- J2EE (52)
- 数据库 (17)
- java基础 (43)
- web技术 (19)
- 程序设计 (6)
- 操作系统 (18)
- IT资讯 (7)
- 我的IT生活 (12)
- 学习笔记 (9)
- Jquery (25)
- JavaScript (18)
- spring (40)
- Hibernate (12)
- Struts (10)
- YUI (2)
- Extjs (22)
- .net (0)
- Eclipse (10)
- 社会主义 (2)
- 服务器 (9)
- CSS (8)
- 网络安全 (16)
- 版本控制 (9)
- PHP (2)
- Oracle (42)
- SQL server (1)
- Mysql (11)
- 项目管理 (3)
- 开发工具使用 (10)
- SQL语句 (7)
- Perl (0)
- Shell (6)
- 漏洞 (4)
- ibatis (5)
- hacker (2)
- SQL注入 (6)
- Hacker工具 (2)
- 入侵和渗透 (7)
- 插件/组件 (2)
- 最爱开源 (5)
- 常用软件 (2)
- DOS (1)
- HTML (2)
- Android (9)
- CMS (1)
- portal (8)
- Linux (7)
- OSGI (1)
- Mina (5)
- maven (2)
- hadoop (7)
- twitter storm (2)
- sap hana (0)
- OAuth (0)
- RESTful (1)
- Nginx (4)
- flex (1)
- Dubbo (1)
- redis (1)
- springMVC (1)
- node.js (1)
- solr (2)
- Flume (1)
- MongoDB (2)
- ElasticSearch (1)
最新评论
-
M_drm:
请问要怎么设置浏览器才不报没权限呢?
用JS在页面调用本地可执行文件的方法(ACTIVEX) -
Alexniver:
官方文档。When importing data into I ...
mysql导入数据过慢 解决方法 -
camelwoo:
我记得 Criteria 可以做连接查询与子查询,也可以做分页 ...
Hibernate总结篇二 -
zhenglongfei:
楼主如果SubKeyName 这个节点不存在,怎么办??怎么用 ...
Java操作注册表 -
yxx676229549:
用log4j 2 了
logback
下面代码则执行了subgo()函数,
<a href="javascript:void(0)" onclick="subgo()">点我</a>
在这里,javascript:void(0),没启实质上的作用,它仅仅是一个死链接,执行的函数是subgo()。
<a href="http://blog.163.com/wb_zhaoyuwei/blog/#" onclick="subgo()">点我</a>与<a href="javascript:void(0)" onclick="subgo()">点我</a>区别。
实际上 #包含了一个位置信息默认的锚是#top 也就是网页的上端 ,而javascript:void(0) 仅仅表示一个死链接,没有任何信息。所以调用脚本的时候最好用void(0)
href一般是指向一个URL地址,也可以调用javascript ,如href="javascript:xxx();",文档中推荐这样写:<a href="http://blog.163.com/wb_zhaoyuwei/blog/ javascript:void(0)" onclick="xxx();">xx</a>,但是这种方法在复杂环境有时会产生奇怪的问题,尽量不要用javascript:协议做为A的href属性,这样不仅会导致不必要的触发window.onbeforeunload事件,在IE里面更会使gif动画图片停止播放。
我们知道链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接),如果不想执行href 属性下的动作执行,onclick 需要要返回 false ,一般是这样写onclick="xxx();return false;".
TabPane的JS源码,由于onclick没有返回FALSE,当IFRMAE中关闭TABPANE时会导致href执行,页面显示有问题。解决办法就是将下面代码复制到使用TAB的JSP中。
------------------------------------------------------------------------------------------------------------------------------------------
至于其他楼说的【IE8中,如:"javascript:;","javascript:void(0)","javascript:void(null)"都被拒绝】因为没有安装IE8,不敢妄下结论。
------------------------------------------------------------------------------------------------------------------------------------------
如果在实际应用中确实是要用到<a>标签来响应onclick事件的。
那么就建议使用下面三种方法
1.<a href="javascript:void(0)" onclick="doSomething()">test</a>
2.<a href="http://blog.163.com/wb_zhaoyuwei/blog/" onclick="doSomething();return false">test</a>
3.<a href="http://blog.163.com/wb_zhaoyuwei/blog/" onclick="doSomething();event.returnValue=false">test</a>
--------------------------------------------------------------------------------------------------
超级链接<a>标记代表一个链接点,是英文anchor(锚点)的简写。它的作用是把当前位置的文本或图片连接到其他的页面、文本或图像,这已是众所周知了,但关于它的语法结构可能有点鲜为人知,而要用活它则必须了解其语法结构。<a>标记的基本语法结构是:
<a
class=type
id=value
href=reference
name=value
rel=same|next|parent|previous
rev=value
target=window
style=value
title=title
onclick=function
onmouseout=function
onMouseOver=function>连接</a>
从标记的语法结构可以看出,在设定一个超级链接时有很多参数可供选择,以实现不同的链接效果,这有点出乎意料吧?!
其中class和id选项:用于设定链接点所属的类型和分配的ID号,通常不加以设定。最常用的两个参数是href和name。其中href是hypertext reference的缩略词,用于设定链接地址。链接地址必须为url地址,如果没有给出具体路径,则默认路径和当前页的路径相同。 链接到的文件也分为几种情况:如果为HTML文件,则在当前浏览器中直接打开;如果为可执行文件(.exe文件),则直接执行或下载,我们提供下载的文件就是用它的这种特性做的;如果为文本文件如word格式的文件,则在浏览器中打开此文件,并可以进行编辑加工。
rel:表示设定链接的关系:rel=same表示待链接的文件与此文件相同,rel=next表示待链接的文件为下一页,rel=parent表示本文件为待链接文件的父文件,rel=previous则表示待链接的文件为上一页。
rev:则用于设定反向链接。
target:是在采用帧窗口的情况下设定链接到哪一个窗口,还有target="_bank"是表示新开一窗口打开网页。
title:用于设定链接点被选到时显示的标题。
onclick:对应于一个事件,当链接点被点击后将触发这个事件,执行对应的子程序。
onmouseover:与onclick类似,对应的事件在鼠标移到链接点上时被触发。
onmouseout:对应的事件在鼠标移出镇接点后被触发。
举几个例子:
<a href="http://blog.163.com/wb_zhaoyuwei/blog/index.htm">回到主页</a>
<a href="http://blog.163.com/wb_zhaoyuwei/blog/sound.wav">播放语音文件</a>
<a href="http://blog.163.com/wb_zhaoyuwei/blog/javascipt.open()">执行对应的程序</a>
<a herf="document.doc">打开对应的文档进行加工</a>
应用技巧
1、提供下载文件
有不少网友来信问,提供下载的效果怎么做。实际上仍然是做一个超级链接,不过供下载的文件必须上传到网站上。例:有一个“网页技巧”的文件包供下载,文件名是“homepagejq.zip”且已上传到网站了,则这个链接的代码可以这样写:<a href="http://blog.163.com/wb_zhaoyuwei/blog/homepagejq.zip">点击这里下载“网页技巧”文件包</a>。
2、在新窗口中打开链接的网页
设定“target”的值为“_blank”。例:新开窗口打开网页“aboutme.htm”。产生该效果的代码是:<a href="http://blog.163.com/wb_zhaoyuwei/blog/aboutme.htm" target="_blank">关于我......</a>。
3、鼠标移到链接,显示一行说明文字
设定“title”参数值,即可获得这种效果。例:当鼠标移到“黄山村夫”这个链接上时,显示说明“这是一个介绍网页制作技巧的专业网站”。这个链接的代码是这样的:<a href="http://blog.163.com/wb_zhaoyuwei/blog/hscf.htm" title="这是一个介绍网页制作技巧的专业网站">黄山村夫</a>。
4、鼠标移到一个链接上弹出一个窗口
这是设定onmouseover参数获得的效果。例:当鼠标移到一个链接上,弹出一个窗口并在窗口中显示“鼠标悬停效果演示!”。这个链接的代码是这样的:<a href="http://blog.163.com/wb_zhaoyuwei/blog/其它网页.htm" onmouseover="alert('鼠标悬停效果演示!')">链接</a>。用类似的方法可以制作当鼠标按下后弹出提出示窗口、当鼠标离开时弹出提示窗口的效果。
5、链接到本页的指定内容
要实现链接到本页的某一部分内容上(也就是“文件内跳转”),必须用参数name指定链接点的名称。选定一块文本,可以用name参数为其命名,以备 链接所用。所谓同一个文件内的跳转是指当读者在阅读一个很长的文件的时候,若只对某部分的内容感兴趣,可以采用跳跃式的阅读方式。其基本格式是:
<a href="#链接点名称">第二部分</a>第一部分内容......
...........................................
<a name="链接点名称"></a>第二部分实际内容......
...........................................
这样当你点击“第二部分”这个超级链接后,就会自动转移到“第二部分实际内容”这个地方来。“name”参数所定义的链接点名称可以随意取,但链接的“href”参数中的链接点名称必须与其一致,不要忘记在前面加上“#”。
6、链接到其它页面的指定内容位置
方法与上例类似,但在“href”参数中的链接点名称前要加上网页的文件名。例:有两个网页page1.htm和page2.htm ,每页均有两部分内容,现要在page1.htm中制作一个超级链接,按下该链接后将转到page2.htm的第二部分内容上。那么我们可以这样做,首先在page2.htm第二部分内容开始的地方写上这样一句代码:<a name="链接点名称"></a>;在page1.htm中写上这样一个链接代码:<a href="http://blog.163.com/wb_zhaoyuwei/blog/pagw2.htm#链接点名称">page2 的第二部分内容</a>。
7、链接到E_mail
点击一个超级链接后,将启动客户机上的电子邮件管理软件给你写信。例这行代码:<a href="mailto:web@webjx.com">请给我写信</a>。一旦你点击了“请给我写信”这个链接,将自动启动电子邮件管理软件(如OE)的写信功能,并已把邮件地址加在了收信人的地址栏里了。
链接不仅可以以文本作载体,也可以以图象作载体,而且可以以图片的某一部分作载体,且都能实现上述这些效果,方法也相同,所不同只是载体,也就是链接的两对方括号中间的那部分,所以不再另举例了。
<a href="javascript:void(0)" onclick="subgo()">点我</a>
在这里,javascript:void(0),没启实质上的作用,它仅仅是一个死链接,执行的函数是subgo()。
<a href="http://blog.163.com/wb_zhaoyuwei/blog/#" onclick="subgo()">点我</a>与<a href="javascript:void(0)" onclick="subgo()">点我</a>区别。
实际上 #包含了一个位置信息默认的锚是#top 也就是网页的上端 ,而javascript:void(0) 仅仅表示一个死链接,没有任何信息。所以调用脚本的时候最好用void(0)
href一般是指向一个URL地址,也可以调用javascript ,如href="javascript:xxx();",文档中推荐这样写:<a href="http://blog.163.com/wb_zhaoyuwei/blog/ javascript:void(0)" onclick="xxx();">xx</a>,但是这种方法在复杂环境有时会产生奇怪的问题,尽量不要用javascript:协议做为A的href属性,这样不仅会导致不必要的触发window.onbeforeunload事件,在IE里面更会使gif动画图片停止播放。
我们知道链接的 onclick 事件被先执行,其次是 href 属性下的动作(页面跳转,或 javascript 伪链接),如果不想执行href 属性下的动作执行,onclick 需要要返回 false ,一般是这样写onclick="xxx();return false;".
TabPane的JS源码,由于onclick没有返回FALSE,当IFRMAE中关闭TABPANE时会导致href执行,页面显示有问题。解决办法就是将下面代码复制到使用TAB的JSP中。
------------------------------------------------------------------------------------------------------------------------------------------
至于其他楼说的【IE8中,如:"javascript:;","javascript:void(0)","javascript:void(null)"都被拒绝】因为没有安装IE8,不敢妄下结论。
------------------------------------------------------------------------------------------------------------------------------------------
如果在实际应用中确实是要用到<a>标签来响应onclick事件的。
那么就建议使用下面三种方法
1.<a href="javascript:void(0)" onclick="doSomething()">test</a>
2.<a href="http://blog.163.com/wb_zhaoyuwei/blog/" onclick="doSomething();return false">test</a>
3.<a href="http://blog.163.com/wb_zhaoyuwei/blog/" onclick="doSomething();event.returnValue=false">test</a>
--------------------------------------------------------------------------------------------------
超级链接<a>标记代表一个链接点,是英文anchor(锚点)的简写。它的作用是把当前位置的文本或图片连接到其他的页面、文本或图像,这已是众所周知了,但关于它的语法结构可能有点鲜为人知,而要用活它则必须了解其语法结构。<a>标记的基本语法结构是:
<a
class=type
id=value
href=reference
name=value
rel=same|next|parent|previous
rev=value
target=window
style=value
title=title
onclick=function
onmouseout=function
onMouseOver=function>连接</a>
从标记的语法结构可以看出,在设定一个超级链接时有很多参数可供选择,以实现不同的链接效果,这有点出乎意料吧?!
其中class和id选项:用于设定链接点所属的类型和分配的ID号,通常不加以设定。最常用的两个参数是href和name。其中href是hypertext reference的缩略词,用于设定链接地址。链接地址必须为url地址,如果没有给出具体路径,则默认路径和当前页的路径相同。 链接到的文件也分为几种情况:如果为HTML文件,则在当前浏览器中直接打开;如果为可执行文件(.exe文件),则直接执行或下载,我们提供下载的文件就是用它的这种特性做的;如果为文本文件如word格式的文件,则在浏览器中打开此文件,并可以进行编辑加工。
rel:表示设定链接的关系:rel=same表示待链接的文件与此文件相同,rel=next表示待链接的文件为下一页,rel=parent表示本文件为待链接文件的父文件,rel=previous则表示待链接的文件为上一页。
rev:则用于设定反向链接。
target:是在采用帧窗口的情况下设定链接到哪一个窗口,还有target="_bank"是表示新开一窗口打开网页。
title:用于设定链接点被选到时显示的标题。
onclick:对应于一个事件,当链接点被点击后将触发这个事件,执行对应的子程序。
onmouseover:与onclick类似,对应的事件在鼠标移到链接点上时被触发。
onmouseout:对应的事件在鼠标移出镇接点后被触发。
举几个例子:
<a href="http://blog.163.com/wb_zhaoyuwei/blog/index.htm">回到主页</a>
<a href="http://blog.163.com/wb_zhaoyuwei/blog/sound.wav">播放语音文件</a>
<a href="http://blog.163.com/wb_zhaoyuwei/blog/javascipt.open()">执行对应的程序</a>
<a herf="document.doc">打开对应的文档进行加工</a>
应用技巧
1、提供下载文件
有不少网友来信问,提供下载的效果怎么做。实际上仍然是做一个超级链接,不过供下载的文件必须上传到网站上。例:有一个“网页技巧”的文件包供下载,文件名是“homepagejq.zip”且已上传到网站了,则这个链接的代码可以这样写:<a href="http://blog.163.com/wb_zhaoyuwei/blog/homepagejq.zip">点击这里下载“网页技巧”文件包</a>。
2、在新窗口中打开链接的网页
设定“target”的值为“_blank”。例:新开窗口打开网页“aboutme.htm”。产生该效果的代码是:<a href="http://blog.163.com/wb_zhaoyuwei/blog/aboutme.htm" target="_blank">关于我......</a>。
3、鼠标移到链接,显示一行说明文字
设定“title”参数值,即可获得这种效果。例:当鼠标移到“黄山村夫”这个链接上时,显示说明“这是一个介绍网页制作技巧的专业网站”。这个链接的代码是这样的:<a href="http://blog.163.com/wb_zhaoyuwei/blog/hscf.htm" title="这是一个介绍网页制作技巧的专业网站">黄山村夫</a>。
4、鼠标移到一个链接上弹出一个窗口
这是设定onmouseover参数获得的效果。例:当鼠标移到一个链接上,弹出一个窗口并在窗口中显示“鼠标悬停效果演示!”。这个链接的代码是这样的:<a href="http://blog.163.com/wb_zhaoyuwei/blog/其它网页.htm" onmouseover="alert('鼠标悬停效果演示!')">链接</a>。用类似的方法可以制作当鼠标按下后弹出提出示窗口、当鼠标离开时弹出提示窗口的效果。
5、链接到本页的指定内容
要实现链接到本页的某一部分内容上(也就是“文件内跳转”),必须用参数name指定链接点的名称。选定一块文本,可以用name参数为其命名,以备 链接所用。所谓同一个文件内的跳转是指当读者在阅读一个很长的文件的时候,若只对某部分的内容感兴趣,可以采用跳跃式的阅读方式。其基本格式是:
<a href="#链接点名称">第二部分</a>第一部分内容......
...........................................
<a name="链接点名称"></a>第二部分实际内容......
...........................................
这样当你点击“第二部分”这个超级链接后,就会自动转移到“第二部分实际内容”这个地方来。“name”参数所定义的链接点名称可以随意取,但链接的“href”参数中的链接点名称必须与其一致,不要忘记在前面加上“#”。
6、链接到其它页面的指定内容位置
方法与上例类似,但在“href”参数中的链接点名称前要加上网页的文件名。例:有两个网页page1.htm和page2.htm ,每页均有两部分内容,现要在page1.htm中制作一个超级链接,按下该链接后将转到page2.htm的第二部分内容上。那么我们可以这样做,首先在page2.htm第二部分内容开始的地方写上这样一句代码:<a name="链接点名称"></a>;在page1.htm中写上这样一个链接代码:<a href="http://blog.163.com/wb_zhaoyuwei/blog/pagw2.htm#链接点名称">page2 的第二部分内容</a>。
7、链接到E_mail
点击一个超级链接后,将启动客户机上的电子邮件管理软件给你写信。例这行代码:<a href="mailto:web@webjx.com">请给我写信</a>。一旦你点击了“请给我写信”这个链接,将自动启动电子邮件管理软件(如OE)的写信功能,并已把邮件地址加在了收信人的地址栏里了。
链接不仅可以以文本作载体,也可以以图象作载体,而且可以以图片的某一部分作载体,且都能实现上述这些效果,方法也相同,所不同只是载体,也就是链接的两对方括号中间的那部分,所以不再另举例了。
发表评论
-
js 函数function用法
2013-01-24 09:23 1048http://blog.csdn.net/sunboy_205 ... -
js 数组Array用法
2013-01-24 09:22 971http://blog.csdn.net/sunboy_20 ... -
DIV滚动条属性及样式设置方式
2012-09-04 17:37 1594这里向大家描述一下DIV ... -
Ajax动态加载目录树(jquery-treeview)
2012-08-08 18:05 0原文:http://blog.csdn.net/bob007a ... -
JQuery上传插件Uploadify详解及其中文按钮解决方案
2012-08-08 18:02 0官网: http://www.uploadify.com/do ... -
汉字/英文字符长度判断--JS版与Java方法版
2012-07-18 17:54 2105http://www.blogjava.net/loyalgl ... -
一个简单的动态关闭DIV框的效果,带关闭按钮
2012-07-14 12:34 1481jquery设置获取div位置 var top=obj. ... -
ExtJS Button的事件和方法定义
2011-12-28 12:24 15317ExtJS Button的事件和方法定义: Ext.onR ... -
IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题
2011-12-27 16:30 2946在使用<input id="file_upl& ... -
网页HTML代码中Meta标签详解
2011-12-26 15:04 1179很多人忽视了HTML标签META的强大功效,一个好的META标 ... -
js实现鼠标点击(非a:hover,a:link,a:visited,a:active)的样式切换效果
2011-12-26 15:00 10982js实现鼠标点击(非a:hover,a:link,a:visi ... -
用JS在页面调用本地可执行文件的方法(ACTIVEX)
2011-06-17 15:59 6552用JS在页面调用本地可执行文件的方法,发现主要是用ACTIVE ... -
js Exception处理
2011-06-17 14:53 4304javascript同java一样,都有异常处理机制。在jav ... -
js中2个等号与3个等号的区别
2011-03-01 16:43 1418首先,== equality 等同,=== identity ... -
js array 取指定元素索引、判断是否相同、重复、过滤数据
2011-02-28 11:05 3846最近写js也多了,Array中有好多方法不够用。自己加了 ... -
Javascript版 UrlEncode和UrlDecode函数 (URL地址栏参数加密解密)
2010-06-25 16:56 6067在做项目的时候需要对(Internet) Search Eng ... -
javascript 小结(持续更新中......)
2010-05-17 15:53 11101.获得被调事件所在的标签对象 var obj = windo ... -
js坐标位置详解 及获取(ie ff)
2010-05-17 14:37 1774function getAbsPoint(e) ... -
博客特效代码
2010-05-14 15:57 1918一、加入时钟代码: 代码格式:<embed ... -
javascript提交表单(JS验证)
2010-05-11 11:29 2085提交 ,javascript提交表单: 目录: 1:js ...
相关推荐
### jQuery 下 A 标签 onclick 事件处理 在前端开发中,经常需要为页面中的元素绑定事件处理函数,其中 `onclick` 事件是最常见的交互方式之一。jQuery 是一个流行的 JavaScript 库,它提供了简单易用的方法来处理...
在`<a>`标签中,`href`和`onclick`是两个重要的属性,它们各自有不同的用途和交互方式。 `href`属性是`<a>`标签的核心属性,用于指定链接的目标地址。它可以是一个HTTP/HTTPS URL,指向另一个网页;也可以是一个...
总结来说,当需要在`<a>`标签中同时使用`href`和`onclick`时,推荐使用`onclick`配合`return false`或`addEventListener`来传递`this`对象,以确保它指向正确的元素。这样,你就可以在处理函数中方便地访问和操作`<a...
HTML中的超链接`<a>`标签是网页...总的来说,理解`<a>`标签的`href`跳转和`onclick`事件的执行顺序及相互作用,对于创建具有动态功能和良好用户体验的网页至关重要。合理运用这些特性,可以让网页交互更加灵活和智能。
`href`和`onclick`都是`<a>`标签的重要属性,它们各自承担着不同的职责,但在某些场景下可能会同时使用,这就涉及到它们之间的区别和交互。 1. **事件顺序**: 当一个`<a>`标签同时具有`href`和`onclick`时,`...
`<a>`标签有两个关键属性,即`href`和`onclick`,它们都可以用来控制页面的跳转行为,但具体使用方式和效果有所不同。 1. `href`属性:`href`属性是`<a>`标签的核心属性,用于定义链接的目标URL。当用户点击这个...
本文将详细介绍在`<a>`标签上添加`onclick`事件的几种常见方法。 ### 方法1: 使用`javascript:js_method()` ```html <a href="javascript:js_method();" rel="external nofollow">点击我</a> ``` 这个方法直接将...
<a href='[removed];' bfnclick='showContent({{d.CONTENT}})'>查看内容</a> [removed] 项目跑了许久,突然说点击查看内容没反应,查出原因是,d.CONTENT如果有单引号或者双引号会报js错误。 于是改成下面的形式...
最后,关于<a>标签的href属性和onclick事件的使用,还涉及到HTML标准和浏览器兼容性的问题。在不同的浏览器中可能会有细微的差别,因此在开发过程中进行充分的测试是非常必要的。总之,正确地使用href属性和onclick...
HTML a 标签是 HTML 中最基本也是最常用的标签之一,它用于定义锚点,可以创建指向其他文档的链接,也可以创建文档内部的书签。下面我们将详细介绍 HTML a 标签的定义、用法、属性和实例。 定义和用法 -------- ...
在Web开发过程中,我们经常会遇到需要通过HTML标签来触发JavaScript函数的需求,其中最常见的就是使用`<a>`标签。本文将详细介绍如何在`<a>`标签中调用JavaScript方法,并对每种方法进行深入分析。 #### 一、常规...
本文将介绍如何使用JavaScript来实现这一功能,包括对带有查询参数的a标签和没有页面跳转功能的a标签进行区分处理。 首先,当页面中的a标签在点击后会导致页面跳转至当前页面,并附带一个查询参数时,我们可以利用...
总结起来,`href`和`onclick`在`<a>`标签中的主要区别在于: 1. `href`定义链接的目标,负责页面间的导航。 2. `onclick`是JavaScript事件,允许在点击时执行自定义的JavaScript代码。 3. 在`onclick`和`href`同时...
在A标签的`onclick`属性中,我们可以在函数调用后加上`return false;`,这样可以阻止A标签的默认行为。例如: ```html <a href="" target="mainFrame" class="STYLE4" onclick="del(); return false;">删除</a> ...
在IE6中,当`<a>`标签的`href`属性被设置为`javascript:void(0)`或者空字符串时,浏览器会尝试阻止默认的页面跳转行为,以便执行`onclick`事件中的JavaScript代码。然而,IE6的事件处理机制并不完善,它有时无法正确...