所以jQuery1.6有了新的函数prop()。

$(selector).click(function(){
    //instead of:
    this.getAttribute('style');
    //do i use:
    $(this).prop('style');
    //or:
    $(this).attr('style');
})

或者在这种情况下,他们会做同样的事情吗?

如果我必须切换到使用prop(),那么如果我切换到1.6,所有旧的attr()调用都会中断?

更新

选择器='#id'$(选择器).click(函数){//而不是:var getAtt=this.getAttribute('style');//我是否使用:var thisProp=$(this).prop('style');//或:var thisAttr=$(this).attr(“样式”);console.log(getAtt、thisProp、thisAttr);});<script src=“https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js“></script>测试</div>

(另请参见此小提琴:http://jsfiddle.net/maniator/JpUF2/)

控制台将getAttribute作为字符串记录,将attr作为字符串记录但将prop作为CSSStyleDeclaration记录,为什么?这对我未来的编码有何影响?


当前回答

有一件事.attr()可以做到。prop()不能做到:影响CSS选择器

这是我在其他答案中没有看到的问题。

CSS选择器[名称=值]

将响应.attr('name','value')但不总是.prop('name','value')

.prop()仅影响少数属性选择器

输入[name](谢谢@TimDown)

.attr()影响所有属性选择器

输入[值]输入[名称]span[名称]input[data自定义属性](.data('custom-attribute')都不会影响此选择器)

其他回答

所有内容都在文档中:

属性和财产之间的差异在特定情况下可能很重要。在jQuery1.6之前,.attr()方法在检索某些属性时有时会考虑属性值,这可能会导致不一致的行为。从jQuery1.6开始,.prop()方法提供了显式检索属性值的方法,.attr()方法检索属性。

所以使用道具!

如果代码是以这种方式编写的,Gary Hole的答案与解决问题非常相关

obj.prop("style","border:1px red solid;")

由于prop函数返回CSSStyleDeclaration对象,上述代码在某些浏览器中无法正常工作(在我的例子中,使用带有Chrome框架插件的IE8进行了测试)。

因此,将其更改为以下代码

obj.prop("style").cssText = "border:1px red solid;"

解决了问题。

在jQuery1.6之前,attr()方法在检索属性时有时会考虑属性值,这会导致相当不一致的行为。

prop()方法的引入提供了一种显式检索属性值的方法,而.attr()检索属性。

文件:

jQuery.attr()获取匹配元素集合中第一个元素的属性值。

jQuery.prop()获取匹配元素集合中第一个元素的属性值。

轻轻提醒使用prop(),例如:

if ($("#checkbox1").prop('checked')) {
    isDelete = 1;
} else {
    isDelete = 0;
}

上面的函数用于检查checkbox 1是否选中,如果选中:返回1;如果没有:返回0。函数prop()在这里用作GET函数。

if ($("#checkbox1").prop('checked', true)) {
    isDelete = 1;
} else {
    isDelete = 0;
}

上面的函数用于设置要检查的checkbox 1,并始终返回1。现在函数prop()用作SET函数。

别搞砸了。

P/S:当我检查Image src属性时。如果src为空,prop返回页面的当前URL(错误),attr返回空字符串(正确)。

属性->HTML

财产->DOM