jQuery常见问题Q&A
2009 7 17 05:20 PM 2377次查看
分类:JavaScript 标签:JavaScript, jQuery
- jQuery是什么,有什么用?
jQuery是一个开源的JavaScript库(可使用与开源或私有、盈利项目),它使用较为统一的接口,并做到了跨浏览器的支持,有助于JavaScript程序员书写更为优美和简短的代码。
jQuery的主要作用有:选择元素,DOM操作(包括更改元素属性、样式、父子关系、复制删除等),处理事件,动画特效,AJAX等。
jQuery的基本思路是用选择器选择元素,然后再对这些元素进行处理,所以选择器是基础。 - jQuery强大在哪里?
我个人认为jQuery最强大的是选择器,文档里约有1/3是关于选择器的,其中不乏很多高级的选择器,例如[attribute=value]、:checked、:nth-child等,以及find()、end()之类的函数,最好多翻翻文档学习下。 - 学习jQuery需要什么前置知识啊?
首先需要比较系统地了解JavaScript的语法,特别是this对象、匿名函数、JSON。
其次要熟悉DOM接口,并找到相应的jQuery方法。
最后要熟悉CSS和XHTML;如果需要使用AJAX,则还需要了解至少一门服务器端语言。 - 我不懂英文,看不懂jQuery的文档怎么办?
这里有中文文档:jQueryAPI参考文档中文版翻译。 - 为什么官网说jQuery不到20k,但我下载下来有50k啊?
因为那是gzip压缩过的,如果服务器开启了gzip压缩,浏览器只会下载20k的数据,并自动解压成50k的实际代码。 - jQuery有几个版本,那个min和pack是什么啊?
原版是带注释和缩进的,适合阅读和调试。
min是gzip版,如果服务器开启了gzip压缩,就用这个版本。
pack是用Dean Edwards写的Packer压缩的,但性能和效果不如min版。 - 我的服务器启用了gzip压缩,可不可以用pack版啊?
你用任何版本都是可以的,如果启用了gzip,再用pack版并不推荐,因为2次压缩没有实质性的效果,反而造成客户端解压时间变长。
因此推荐min版。 - jQuery太占服务器流量了,怎么办?
可以使用Google的AJAX库托管服务。 - XXX可以用jQuery来做吗?XXX怎么用jQuery来做?
jQuery本质上是纯JavaScript实现的,所以jQuery能做到的都是JavaScript本身就支持的功能。
如果要转成jQuery风格,请查阅文档是否有这些方法。 - 为什么我选择出来的元素不能访问value、innerHTML等属性?
因为jQuery的选择器选择出来的是jQuery对象,它将DOM元素进行了封装,所以没有value、innerHTML等属性。
如果需要可以用val()和html()方法取代;或者用get()方法、下标操作符[]获取DOM元素,再访问其属性。(我推荐前者) - 我有个DOM元素,我怎么把它转换成jQuery对象啊?
用$(dom元素)就行了。
转换回去的话见上一问。 - 我知道DOM元素的id,但这个id是动态的,我怎么获取这个元素啊?
假设变量id是你要获取的DOM的id:$('#' + id)。 - 我的页面上有很多个DOM元素的id是一样的,但是用jQuery只能获取1个,为什么?
因为W3C标准规定了,1个页面里不能有2个以上元素具有相同的id属性(无id除外)。
需要相同的话,请改用name属性,并用$('[name=xxx]')来获取。 - 为什么我用最新版的jQuery 1.3.2,$('[@name=xxx]')取不到对象啊?
因为你用的是1.2.x的语法,在1.3.x里属性选择器是不需要@前缀的,去掉即可。 - 如果选择器里有些属性使用了[]、.等特殊字符怎么获取?
我建议最好是不要用这些字符,如果非要使用,请用\\来进行转义,例如:$('#ooxx\\[1\\]')。 - $(...).xxx()和$.xxx()有什么区别啊?
$(...)是一个选择器,它返回一个包装了DOM元素的jQuery对象,这个对象的xxx()方法一般是操作对象自身用的。
$是jQuery这个变量的别名,它的xxx()方法一般是操作其他对象用的,所以一般需要将被操作对象作为参数来调用。 - jQuery有没有插件啊?
jQuery有数以千计的插件,绝大部分都是开源的,你可以在这找到:jQuery Plugins。
其中最强大的是jQuery UI。 - 我可以自己开发插件么?
当然可以,jQuery提供了2个接口来扩充:
jQuery.fn.extend:这个扩充的是$(...).xxx()这种类型的方法。
jQuery.extend:这个扩充的是$.xxx()这种类型的方法。
详细使用方法请参考文档。 - 我的网页上还有其他的变量/库使用了$,怎么能不与jQuery冲突呢?
$只是jQuery这个变量的别名,所以只要jQuery这个变量名没被占用,你就可以用jQuery。
方法是调用jQuery.noConflict(),然后用jQuery取代$。
如果觉得太长了,也可以用var $j = jQuery;。此外,jQuery.noConflict()也会返回jQuery本身,所以这样也是合法的:var $j = jQuery.noConflict();。 - $('a, b')和$('a', 'b')有什么区别?
$('a, b')使用的是CSS选择器,表示a和b的并集,是或的关系,相当于$('a').add('b')。
$('a', 'b')使用的是上下文选择器,表示在b这个上下文里寻找a,是包含关系,相当于$('a').find('b')。 - 我选择出了很多个元素,我想对它们都调用一个方法,怎么弄?
用each方法:
$(...).each(function(n) {...})
其中n是代表是第几个元素。 - 我不想继续执行each了,怎么办?
在函数里return false即可。 - $(...).each和$.each有什么区别?
请参考“$(...).xxx()和$.xxx()有什么区别”。 - 我用$('div').click对div绑定了鼠标点击事件,为什么没有效果啊?
绑定对象时,只有当前存在的对象才会被绑定,如果是在绑定之后创建的对象,则不会绑定。
一般来说都是在$(documnet).ready()或DOM结尾时获取元素并绑定。 - 为什么我用AJAX方法新生成的DOM元素不会绑定事件啊?
原因同上。
如果需要,请在AJAX执行成功后再次手动绑定,或使用live函数、Live Query插件。 - 我不想让事件向上(父元素)传播怎么办?
绑定事件时的函数对象有个event参数,调用这个参数的stopPropagation()方法就可以停止传播了。
此外,它的preventDefault()方法可以阻止浏览器默认事件,return false则相当于调用上面2个方法。 - 我有没有办法知道事件最初的触发目标?
上述的event对象有个target属性,这就是最初的触发目标。
你可以和this进行比较,就知道当前对象是不是触发目标了。 - this对象究竟是什么?
一般你只会在绑定事件时用到,它就是处理这个事件的函数所属的对象。你可以用$(this)将其转换为jQuery对象。 - 为什么animate函数不支持color和backgroundColor?
请使用color插件或jQuery UI。 - 我想让动画不断执行怎么办?
animate有个callback参数,在这个参数里再次调用函数自身就行了。 - $(documnet).ready(function(){...})和$(function(){...})有什么区别?
没区别。后者是前者的缩写,执行时会被转换成前者。 - 为什么我的AJAX出现乱码?
这是编码不一致造成的,请在客户端、服务器和数据库使用相同的编码,推荐UTF-8。
如果没法相同,可以在客户端使用encodeURIComponent()和decodeURIComponent()处理。 - 我的AJAX失败了怎么办?
使用$.ajax()函数可以进行错误和超时处理。将error的参数输出,就知道出错原因了。
常见的原因有:服务器端未设置正确的content-type头,跨域导致权限不够。 - AJAX如何跨域?
最方便的是使用JSONP,请参考《使用JSONP来取代AJAX进行跨域》。
向下滚动可载入更多评论,或者点这里禁止自动加载。