jq-03 属性、位置
一、属性操作
.attr()
; 传一个参数为获取,两个为设置;removeAttr()
; 删除属性;.prop()
;传一个为获取,两个为设置;removeProp()
;删除属性;
如果需要设置多少属性,可以添加一个对象;
attr和prop的区别
- prop添加的自定义属性在html页面上是没有的,比如index属性。
- 对于布尔类型的属性来说,应该使用prop;
- prop只能删除自定义的属性,不能删除自带的属性;
- 在jQuery1.6之后,对于checked、selected、disabled这类boolean类型的属性来说,应该使用prop方法。
$("input").attr("checked"); //checked
$("input").prop("checked"); //true
// 设置属性
$(':checked').prop('checked',true);
// 获取属性
$(':checked').prop('checked');// 返回true或者false
全选案例:
$("label :checkbox").click(function(){
$("div input").prop("checked",$(this).prop("checked")) //点击全选,让div下的所有input选项都被选中,值和全选按钮一样;
})
$("div input").click(function(){
if($("div input:checked").length == $("div input").length){
//如果被选中的长度和所有input的长度相等,则让全选按钮被选中;
$("label :checkbox").prop("checked",true);
}else{
$("label input").prop("checked",false)
}
})
二、类名操作
addClass()
;添加类名,多个用空格隔开,不会去掉原有的;removeClass()
;删除类名,填写指定删除类名;toggleClass()
;有则删除,没有则添加,常用于点击事件;hasClass("on")
; 是否有on的类名的元素,有返回true,没有返回false,可以做为判断,判断没有就添加,判断没有就添加;
三、文本内容
html()
; 获取文本内容,传内容为设置新内容;类似于innerHTML;text()
; 获取文本内容,传内容为设置新内容;类似于innerText;val()
; 获取input默认值;传内容设置新内容;val([])
;根据value值选中表单复选框或单选框;中括号填写value值来选中,
选中select时,可以直接在val框填写选中项,多选时,多个项填写到数组中;
四、css样式
.css()
;
- 获取:填写一个参数属性名;
- 设置:填写属性名和属性值;
- 设置多个样式时,可以放到一个对象当中,
可以简写:属性值可以不加单位px,对象里属性名可以不加引号,如果有中划线不加引号需要转变驼峰;
$('div').css({width: 50, height: 50})
五、位置
offset()
; 返回一个对象,到html的位置,和定位属性没关系;offset().top/left
; 取对象里面的top值和left值;position()
; 返回一个对象,到父元素有定位属性的距离,position().top/left
; 取对象里面的top值和left值$(window).scrollTop()/scrollLeft()
浏览器被卷起的top值和left值;- 括号里面也可以设置值,到指定位置;
- $(document)也可以,最好是window,是标准写法;
$(window).scroll(function(){})
; 浏览器被卷起执行函数;
六、尺寸
width()/height()
; 获取元素的宽度和高度;获取出来的没有单位px;innerWidth()/innerHeight()
; 宽度/高度+paddingouterWidth()/outerHeight()
; 宽度/高度+padding+border(真实宽高);括号里面加true,可以加上margin;$(window).width()/height()
; 浏览器可视宽高;$(document).width()/height()
;文档的真实内容宽高;
七、节点
创建
创建:$("<li>3</li>")
; 创建了一个内容为3的li标签;
添加节点
- 从后添加
父元素.append(新节点)
新节点.appendTo(父元素)
- 从前添加
父元素.prepend(新节点)
新节点.prependTo(父元素)
- 指定标签之后
a.after(b)
b.insertAfter(a)
- 指定标签之前
a.before(b);
b.insertBefore(a)
- 替换
a.replaceWith(b)
; b替换a; 替换会将内容也直接清空;b.replaceAll(a)
; b替换a;
谁在前链式调用就是给谁添加事件;
// 谁在前调用,就是给谁设置css样式;
$("ul").append("<li></li>").css(“border","1px solid red");
$("<li></li>").appendTo($("ul")).css("border","1px solid red");
包裹节点
a.wrap(b)
把调用的标签包起来;a.wrapAll(b)
把所有的a标签拿出来包一个父元素;a.wrapInner(b)
把a标签的内容用一个父元素包起来;a.unwrap()
删除包裹的父元素;
克隆节点
.clone()
; 可以传布尔值,不传为false;- false:只克隆元素,不克隆脚本;
- true:脚本一起克隆;
删除节点
.empty()
删除元素内容,自身保留;.html('')
清空内容,会造成内存泄漏,绑定的事件不会被清除;.remove()
把整个元素删除,返回被删除的元素,会将脚本删除;(即使再添加回去也没有事件).detach()
返回被删除的元素,不会删除脚本;(添加回去还有事件)
十一、筛选(方法)
first()
所有元素中的第一个last()
所有元素中的最后一个eq()
下标从0开始not()
除了传入的元素has()
有小括号中的元素slice()
和字符串slice用法一样is()
根据选择器、元素或 jQuery 对象来检测匹配元素集合,如果这些元素中至少有一个元素匹配给定的参数,则返回 true。filter()
找到传入元素的元素,括号还可以是一个函数;filter(function(){return nodeType!=1}) 不是标签的节点contents()
所有子节点和文本节点,一般配合filter使用
父元素相关
children()
直接子元素,可以传参,指定某个直接子元素find()
所有子元素,传参为某个子元素parent()
直接父元素parents()
所有父元素可以传参,指定某个父元素parentsUntil()
所有父元素直到传入的父元素,不包括传入的父元素offsetParent()
找到离他最近的有定位的父元素
兄弟节点
next()
选择下一个相邻兄弟元素nextAll()
选择下面所有的元素,小括号填写可以指定下面的某个元素(css样式选择器当中是("li~p")li下面所有的兄弟元素p)nextUntil()
下面所有的兄弟元素直到小括号的元素,不包括小括号prev()
上一个兄弟元素prevAll()
上面所有的兄弟元素,小括号传参表示指定元素prevUntil()
上面所有的兄弟元素直接小括号的元素,不包括小括号siblings()
所有兄弟元素,可以传一个具体的标签,指定某些兄弟元素
// 使用contents作childNodes使用;
$("span:contains(改)").click(function(){
var val = prompt("请输入一要添加的内容")
$("div").contents().filter(function(){return this.nodeType!=1})[0].nodeValue = val;
console.log(val);
})
十二、自定义动画
.animate()
; 参数是:对象,时间,函数;
$('div').animate({'opacity': 1}, 200, function(){
console.log('动画完成')
})
让浏览器的scroll滚动条慢慢回到0
$("html,body").animate({"scrollTop":0})
;
写html和body是兼容;相当于:document.documentElement || document.body
;
高频面试题
● $().attr 与 $().prop() 的区别 ?