一、 jQuery 优势
jQuery 是优秀的 JavaScript 库,优势如下:
- 轻量级
- 强大的选择器
- 出色的 DOM 操作封装
- 可靠的事件处理机制
- 完善的 Ajax
- 不污染顶级变量
- 出色的浏览器兼容性
- 链式操作方式
- 隐式迭代
- 行为层与结构层的分离
- 丰富的插件支持
- 完善的文档
- 开源
二、jQuery 代码的编写
1. 在页面中引入 jQuery
<!-- 在 head 标签内引入 jQuery -->
<script src="./scripts/jquery.js"></script>
编辑简单的 jQuery 代码
<script>
$(document).ready(function(){
alert("Hello World")
})
</script>
2. window.onload 与 $(document).ready() 的对比
window.onload | $(document).ready() | |
---|---|---|
执行时机 | 必须等待网页中所有内容加载完毕后(包括图片)才能执行 | 网页中所有 DOM 结构绘制完毕后就执行,可能 DOM 元素关联的东西并没有加载完 |
编写个数 | 不同同时编写多个 一下代码无法正确执行 window.onload = function(){ alert(“test1”) } window.onload =function(){ alert(“test2”) } |
能同时编写多个 以下代码正确执行 $(document).ready(function(){ alert(“Hello World”) }) $(document).ready(function(){ alert(“Hello again”) }) |
简化写法 | 无 | $(document).ready(function(){ // … }) 可以简写成: $(function(){ // … }) |
3. jQuery 代码风格
链式操作风格
$this.addClass("highlight")
.children("li").show().end()
.siblings().removeClass("highlight")
.children("li").hide()
为了易读性,总结 3 种格式
- 对于同一个对象不超过 3 个操作,可以直接写成一样
- 对于用一个对象的较多操作,建议每行写一个操作
- 对于多个对象的少量操作,可以每个对象写一行,如果涉及子元素,可以考虑适当地缩进
为了提高可读性性,对于复杂的链式操作,可以为代码添加注释
三、jQuery 对象和 DOM 对象
jQuery 对象就是通过 jQuery 包装 DOM 对象后产生的对象
$("foo").html() // 获取 id 为 foo 的元素内的 html 代码
// 等同于
document.getElementById("foo").innerHTML
一般我们对 jQuery 对象类型的变量前面 $
var $variable = jQuery 对象
var variable = DOM 对象
1. jQuery 对象转成 DOM 对象
var $cr = $("#cr")
var cr = $cr[0]
2. DOM 对象转成 jQuery 对象
var cr = document.getElementById("cr")
var $cr = $(cr)
强调一下,DOM 对象才能使用 DOM 中的方法,jQuery 对象不可以使用 DOM 中的方法
举一个例子加深对 jQuery 对象和 DOM 对象的理解
// 使用 DOM 方式判断复选框是否被选中
$(document).ready(function(){
var $cr = $("#cr")
var cr = $cr[0]
$cr.click(function(){
if(cr.checked){
alert("感谢您的支持!你可以继续操作")
}
})
})
// 使用 jQuery 方法判断选项是否被选中
$(document).ready(function(){
var $cr = $("#cr")
$cr.click(function(){
if($cr.is(":checked")){
alert("感谢您的支持!你可以继续操作!")
}
})
})
四、解决 jQuery 和其他库的冲突
默认情况下,jQuery 用 $ 作为资深的快捷方式
函数 jQuery.noConflict() 可以将变量 $ 的控制权交出来,并能够自定义快捷方式
// 把 $ 的控制权转移
jQuery.noConflict()
// 自定义快捷方法
var $j = jQuery.noConflict()
「@浪里淘沙的小法师」