Javascript $(this.prop(';属性';)与this.property
考虑到jQuery的少写多做的哲学,当我看到这一点时,我总是感到惊讶:Javascript $(this.prop(';属性';)与this.property,javascript,jquery,Javascript,Jquery,考虑到jQuery的少写多做的哲学,当我看到这一点时,我总是感到惊讶: $(this).prop('checked') …而不是这个: this.checked 查看最新的jQuery源代码,prop()为以下两个问题提供了便利: $(elem).prop('for')相当于elem.htmlFor $(elem.prop('class')相当于elem.className 它还将tabIndex标准化为: 0表示不带制表符索引的可制表符元素。 -1表示不可制表的元素。 prop() 但
$(this).prop('checked')
…而不是这个:
this.checked
查看最新的jQuery源代码,prop()
为以下两个问题提供了便利:
$(elem).prop('for')
相当于elem.htmlFor
$(elem.prop('class')
相当于elem.className
tabIndex
标准化为:
- 0表示不带制表符索引的可制表符元素。
- -1表示不可制表的元素。
prop()
但是使用prop()
在单个元素上设置或检索单个属性有什么好处(惯用的除外),除非规范化tabIndex
——特别是当您在回调中引用该元素时(例如this
)。prop
作为getter没有真正的好处,事实上,它的性能不如直接访问属性
.prop
的真正用途是用作设置器
如果您阅读,有3种方法可以使用.prop
进行设置
.道具(道具,价值)
第一种方法对单个元素没有好处(除非可能存在兼容性问题)
实际上this.check=true
与$(this).prop('checked',true)
相同,但速度更快
但是,如果您有一组元素,则有一个优势。您不必手动循环所有元素,jQuery可以为您完成
.prop({prop:value[,prop:value,…]});
当您有多个属性要更改时,第二种方法很有用。不要像这样列出要更改的每个属性:
this.prop1=true;
this.prop2=true;
this.prop3=true;
this.prop4=true;
$(this).prop({
prop1 : true,
prop2 : true,
prop3 : true,
prop4 : true
});
您可以传递这样的对象:
this.prop1=true;
this.prop2=true;
this.prop3=true;
this.prop4=true;
$(this).prop({
prop1 : true,
prop2 : true,
prop3 : true,
prop4 : true
});
.prop(prop,callback)
第三种方式在我看来是我最喜欢的一种。使用回调函数可以在一组条件下单独设置每个元素。回调函数接收两个参数:索引和旧值
使用函数的一个好例子是反转每个复选框的状态:
$('checkbox').prop('checked', function(_, old){
return !old;
});
不,没有优势。当您拥有的唯一东西已经是一个jQuery对象时,这很方便,但是创建一个新的jQuery对象以便调用.prop()
是愚蠢的。@px5x2-在按照此示例从中读取值时不是。我喜欢这个线程-不确定它是否需要答案,但您说明了我只使用5年前5%的jQuery库的原因之一。普通的方法甚至对基本的js类型完全有意义,例如document.querySelector('input[type=checkbox'))
上的checked属性将给我一个布尔值,因为它正在查找一个复选框,但是document.querySelector('div'))
将是未定义的。@RickHitchcock:有时,该表单用于与代码的其余部分保持一致,或用于不混淆新手,或在将代码从问题复制到答案时未被编辑。尽管有更好的知识,.jQuery对某些属性进行了一些更正,例如IE中的src
和href
,tabIndex
,…prop
作为一个getter具有处理每个jQuery集合的优势,尤其是空的和动态选择的集合。当然,$(这个)
:-)@Bergi-Ahah是的,我不认为这是一个真正的优势,但你是对的。这似乎是确定的,回调
方法在某些情况下绝对是一个优势。接受,谢谢。