题目1: jQuery 能做什么?
jQuery是一个javascript的函数库。jQuery的语法操作使得许多操作变得容易,如操作文档对象,选择文档对象模型元素,创建动画效果,处理事件,以及开发AJAX程序。jQuery也提供了给开发人员在其上创建插件的能力,这使开发人员可以对底层交互与动画、高级效果和高级主题化的组件进行抽象化。模块化的方式使jQuery函数库能够创建功能强大的动态网页以及网络应用程序
题目2: jQuery 对象和 DOM 原生对象有什么区别?如何转化?
DOM对象是使用传统javascript获取的对象,jQuery对象是通过jQuery的类选择器获得的对象。jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是可以使用jQuery的方法,但是不能使用DOM方法。DOM对象只能使用DOM方法,不能使用jQuery方法。
jQuery转DOM对象有两种转换方式,[index]
和.get(index)
$('#v'); //jQuery对象
$('#v')[0]; //DOM对象
$('#v').get(0); //DOM对象
DOM对象转jQuery对象
var v = document.getElementById('v'); //DOM对象
var v2 = $(v); //DOM对象转jQuery对象
题目3:jQuery中如何绑定事件?bind、unbind、delegate、live、on、off都有什么作用?推荐使用哪种?使用on绑定事件使用事件代理的写法?
jQuery事件是DOM事件的封装,同时支持自定义扩展。一般使用bind
、on
、live
、delegate
、keyup(<function>)
来绑定事件。
bind
<div id='foo'></div>
<script>
$('#foo').click(function(){
console.log('clicked!');
});
</script>
.click(<function>)
等效于.bind('click', <function>)
。另外还可以通过unbind
来解绑事件:
$('#foo').unbind('click');
.bind
将会给所有匹配的元素都绑定一次事件,当元素很多时性能会变差。后来新增的元素不会被绑定。页面加载完成时,才能进行bind
。
Delegate
.delegate
也是绑定事件的方法,它将事件处理函数绑定在指定的根元素上,由于事件会冒泡,可以用来处理指定的子元素上的事件。
<div id="root">
<a>Alice</a>
<a>Bob</a>
</div>
<script>
$('#root').delegate('a', 'click', function(){
console.log('clicked');
});
</script>
- 自动绑定动态添加的元素,因为事件处理函数绑定在
#root
上,新加的子元素事件也会冒泡到#root
- 性能好于
bind()
。只绑定一个事件处理函数,绑定速度相当快。
live
.live()
方法会绑定相应的事件到你所选择的元素的根元素上,即是document元素上。那么所有通过冒泡上来的事件都可以用这个相同的handler来处理了。
优点:
- 这里仅有一次的事件绑定,绑定到document上而不像.bind()那样给所有的元素挨个绑定
- 那些动态添加的elemtns依然可以触发那些早先绑定的事件,因为事件真正的绑定是在document上
- 你可以在document ready之前就可以绑定那些需要的事件
缺点:
- 从1.7开始已经不被推荐了,所以你也要开始逐步淘汰它了。
- Chaining没有被正确的支持
- 当使用event.stopPropagation()是没用的,因为都要到达document
- 因为所有的selector/event都被绑定到document, 所以当我们使用matchSelector方法来选出那个事件被调用时,会非常慢
- 当发生事件的元素在你的DOM树中很深的时候,会有performance问题
on
其实.bind(), .live(), .delegate()都是通过.on()来实现的,.unbind(), .die(), .undelegate(),也是一样的都是通过.off()来实现的。
// Bind
$( "#members li a" ).on( "click", function( e ) {} );
$( "#members li a" ).bind( "click", function( e ) {} );
// Live
$( document ).on( "click", "#members li a", function( e ) {} );
$( "#members li a" ).live( "click", function( e ) {} );
// Delegate
$( "#members" ).on( "click", "li a", function( e ) {} );
$( "#members" ).delegate( "li a", "click", function( e ) {} );
一般推荐使用on
来绑定事件。
题目4:jQuery 如何展示/隐藏元素?
//使用hide(), show()方法
$('#div').show();
$('#div').hide();
//使用attr()方法设置属性
$('#div').attr("style", "display:none;");
$('#div').attr("style", "display:block;");
//使用css()方法
$('#div')..css('display', 'none');
$('#div')..css('display', 'block');
题目5: jQuery 动画如何使用?
.animate()
一共有两种方法:
-
.animate( properties [, duration ] [, easing ] [, complete ] )
properties
是必须的,规定产生动画效果的CSS样式和值。
duration
可选,规定动画的速度,默认是normal
400
easing
设置easing函数,默认是swing
complete
animate执行完之后要执行的函数 -
.animate( properties, options )
properties
规定产生动画效果的 CSS 样式和值
options
规定动画的额外选项
题目6:如何设置和获取元素内部 HTML 内容?如何设置和获取元素内部文本?
可以使用html()
方法来获取元素内部的HTML内容 使用.html( htmlString )
来设置元素内部的HTML内容。
使用text()
方法来获取元素内部的文本,使用text(text)
来设置元素内部文本
题目7:如何设置和获取表单用户输入或者选择的内容?如何设置和获取元素属性?
//获取input text输入的内容
$('input[type=text]').val()
//获取radio的值
$('input[type=radio]').val()
//获取select的值
$('select').val()
//获取select name 属性
$('select').attr('name')
//设置select name属性
$('select').attr("name", "test")
$('select').attr({name: 'test'})