选择器
- :visible 和 :hidden 匹配显示和隐藏的元素(css-display),需要指明元素或类,因为head、script等元素也是不可见的。
- :animate 处于动画的元素
- tr:nth-child(even) tr:nth-child(2n) 偶数行,odd 奇数行 3n 隔两行。(tr:even tr:odd)
- tr:nth-child(1)、tr:first、tr:first-child、$(“tr”).first() 、$(“tr”).eq(0) 拿到一样的
- tr:only-child 只有一个子元素的
- tr:gt(i) 拿到i之后的
- tr:lt(i) 拿到i之前的
- tr:not(“.className”) 获取不含指定类的
- input:not(:checkbox) 非复选框的input元素
- tr:contains(text) 获取包含给定文本的
- tr:empty 获取无子元素或文本的空元素
- tr:has(selector) 获取有匹配子选择器的元素
- tr:parent 获取含有子元素或者文本的元素
- tr:hidden 获取所有不可见元素 (通过.show()展示)
- tr:visible 获取所有的可见元素 (通过.hide()隐藏)
- tr[attribute=value] 属性选择器 *= ^= $= !=
- li:has(a) 包含a的li
- 针对表单元素的一些特殊选择器
:input 匹配的是 <input>,<textarea>,<select>,<button>
:button 匹配 input[type=button|reset|submit]和button
:file 即 input[type=file],同理还有 :checkbox,:radio
:checked 勾上的单复选框
:disabled 和 :enabled 能和不能点击或输入的表单元素
:focus 匹配当前焦点元素
:checkbox:checked:disabled 匹配的是不能点击的已选中的复选框
API
prop() 和 attr()
prop() 方法用来改变影响DOM元素的动态状态,而不是改变HTML属性。比如: disabled、checked
clone()
参数是布尔值,代表是否复制事件,默认false。
$('.item').on('click', function(){});
$('.item').clone(true).appendTo('.list'); // 克隆 .item(包括事件)并添加到 .list
val()
设置或者返回表单元素(input、select、textarea)的值
replaceWith() 和 replaceAll()
<div id="app">hello jquery world.</div>
var $e = $("div").replaceWith("<p>你好,jquery</p>");
返回的是 div#app 的 jQuery 对象,但已从 dom 树中移除,页面呈现的是p。
而 $("<p>你好,jquery</p>").replaceAll("#app") 返回的是 p 的jQuery对象。
width() 和 height()
设置或者获取匹配元素的宽度和高度值,返回的是number(不带单位),而$(selector).css('width')返回的是string(带有单位)
offset()
获取匹配的第一个元素相对于 document 的位置
返回:{left: Number, top: Number}
设置:如果元素没有定位(即 position: static),将会修改为 relative
注意:jQuery不支持获取隐藏元素的偏移坐标。同样的,也无法取得隐藏元素的 border, margin, 或 padding 信息。
若元素的属性设置的是 visibility:hidden,那么我们依然可以取得它的坐标。但是若设置的属性是 display:none,由于在绘制 DOM 树时根本就不绘制该元素,所以它的位置属性值是 undefined。
position()
获取匹配的第一个元素相对于其最近的具有定位(即position不是static)的父元素的位置
返回 {left: Number, top: Number}
不能设置。
注意:jQuery不支持获取隐藏元素的偏移坐标及所占用的边框,边距和填充的大小
scrollLeft() 和 scrollTop()
获取或者设置匹配的第一个元素水平和垂直方向的位置,数值类型
垂直滚动条位置 是可滚动区域 在 可视区域上方的 被隐藏区域的高度。
如果滚动条在最上方没有滚动 或者 当前元素没有出现滚动条,那么这个距离为0
回顶部代码 $('html,body').scrollTop(0);兼容IE 和 Chrome,瞬间回到顶部。
事件
标准事件类型
- click mouseup mousedown …
- keypress …
- dblclick mousewheel
- change 用在 input select 元素上
- $(window).resize 调整浏览器窗口大小时触发的事件
事件绑定 bind()、delegate() 和 on()
bind()在1.7以后被on()取代,绑定多个事件:$(selector).on('dblclick contextment', function(){}); on()也兼容zepto。但是这两种方法的缺点是要绑定的元素必须存在文档中。语法: $(selector).on('events'[, 'selector'][, data], handler); 其中第一个参数可以是标准事件名,也可以是自定义事件(通过trigger触发),第二和第三个参数可以省略,第二个参数为匹配元素的后代元素,第三个参数为传递给处理函数的数据,即在函数中通过 event.data 来接收。
delegate() 支持对动态创建的元素有效。语法:$('div').delegate('p', 'mousemove', function(){}); 为div下面的p(包括未来产生的)绑定mousemove事件。
事件解绑 unbind()、undelegate() 和 off()
不传参数就解绑匹配元素的所有事件,否则就解绑指定参数的事件。
$(selector).off('click', '**'); 解绑所有代理的click事件,而元素本身的事件不会被解绑。
事件触发 trigger() 和 triggerHandler()
简单触发:$(selector).click();
trigger()触发事件,触发浏览器行为。$(selector).trigger("click");
triggerHandler()触发事件响应方法,不触发浏览器行为。$(selector).triggerHandler("focus");
事件对象event
event.data 传递给事件处理程序的额外数据
event.currentTarget 等同于this,指当前DOM对象
event.target 触发事件源,不一定是等同this(通常在事件委托中出现)
event.type 事件类型
event.which 鼠标的按键类型:左1 中2 右3 或者键盘码
event.keyCode 键盘码
event.pageX 鼠标相对于文档左部边缘的位置
动画
通常第一个参数为速度(fase、normal、slow、ms),第二个参数为一个函数,动画完成后执行。
- show() 和 hide() 实现显示和隐藏,可同时改变 width、height、opacity。toggle() 切换状态。
- fadeIn() 和 fadeOut() 淡入淡出,仅改变 opacity
- fadeTo() 按指定透明度进行渐进式调整
- slideUp() 和 slideDown() 卷窗帘效果,仅改变 height。slideToggle() 切换状态。
- animate() 自定义动画
动画的停止与延时 stop()、delay()
AJAX
$.ajax({
beforeSend(){} // 发送请求之前调用的匿名函数,如果 return false; 就代表阻止该次请求,可以用于验证用户输入的数据
})
链式编程
原理: return this;
通常只有设置操作才可以链式操作,获取操作时返回相应的值,无法返回this。
end() 结束当前链最近的一次过滤操作,并且返回匹配元素之前的状态。
多库共存
jQuery占用了$ 和jQuery这两个变量,如果同一个页面引用了jQuery库,还引用了其他库或者其他版本的jQuery也用的了$或jQuery这个变量,为了保证每个库都能正常使用,就需要让jQuery交出变量的控制权。
$.noConflict(); 交出$
$.noConflict(true); 交出$ 和 jQuery
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
// 查看版本
console.log($.fn.jquery); // 3.2.1
console.log(jQuery.fn.jquery); // 3.2.1
</script>
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
$.noConflict();
console.log($.fn.jquery); // 2.2.4
console.log(jQuery.fn.jquery); // 3.2.1
</script>
<script src="https://cdn.bootcss.com/jquery/2.2.4/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
$.noConflict(true);
console.log($.fn.jquery); // 2.2.4
console.log(jQuery.fn.jquery); // 2.2.4
</script>