$(this).prop(' property')vs. this.property

时间:2015-04-10 13:53:05

标签: javascript jquery

鉴于jQuery的哲学 写得更少,做更多 ,当我看到这一点时,我总是感到惊讶:

$(this).prop('checked')

......而不是:

this.checked

查看最新的jQuery源代码,prop()为这两个 gotchas 提供了便利:

  1. $(elem).prop('for')相当于elem.htmlFor
  2. $(elem).prop('class')相当于elem.className
  3. 它还将tabIndex规范化为:

       
    • 0表示没有制表符索引的可列表元素。  
    • -1表示非可列表元素。

    prop()对于一次设置多个元素的属性以及在单个元素上链接属性非常有用。

    但除了标准化prop()之外,使用tabIndex设置或检索单个元素上的单个属性是否有任何优势(除了惯用之外) - 特别是当您对元素有引用时(例如回调中的this

1 个答案:

答案 0 :(得分:5)

.prop作为一个吸气剂没有真正的优势,事实上,它比直接访问该财产的性能要差。

.prop的实用性是用作设置器时。

如果您阅读DOC,则可以使用.prop进行设置。


.prop(prop,value)

第一种方法对单个元素没有任何好处(除非存在兼容性问题,否则。)

实际上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
});

.prop(prop,callback)

第三种方式在我看来是我最喜欢的方式。使用回调函数允许您在一组条件下单独设置每个元素。回调接收2个参数:索引和旧值。

使用函数的一个很好的例子是反转每个复选框的状态:

$('checkbox').prop('checked', function(_, old){
    return !old;
});