何时使用.attr()来设置/更改属性值是否合适?

时间:2014-09-19 14:21:50

标签: javascript jquery html dom

请假设它与.prop() vs .attr()重复

,请花时间完整阅读该问题

我已阅读.prop() vs .attr()以及一些副本和相关的非重复内容。我的问题是:在处理HTML和DOM时,何时将值传递给 .attr()是否合适?

当然,简单的答案是"为什么,只要你想设置或修改属性的值 - 否则(通常)使用.prop()。"

但我真正想知道的是你应该什么时候做。在该方法的jQuery文档中,我看到了在id元素上设置srcalt titleimg等内容的示例。但是,使用.prop()设置这些特定属性,文档似乎并没有给出任何关于为什么要这样做的指示。

我所追求的是何时使用.attr()来设置事物而不是.prop()的指导原则。

相关说明:我正在处理的特定情况是改变表单上的操作的正确方法,但实际上我希望决策背后的观点和理解。

编辑为了澄清,我不是在寻找:

  • 属性和属性之间的差异
  • .attr()和.prop()
  • 之间的差异
  • 使用.attr()和.prop()与属性或属性的获取值之间的差异

否则,我们可以将其标记为重复并将其称为一天:)目前为止所提供的内容没有任何违法行为 - 只是想明确表示我和#39;正在寻找有关何时确定何时使用.attr()来设置属性值的信息,这是我在古老的.prop() vs .attr()上找不到的信息(尽管它是'在那里,我错过了,让我们明确地将其标记为重复!)谢谢!

2 个答案:

答案 0 :(得分:1)

来自http://jq4you.blogspot.in/2013/04/jquery-attr-vs-prop-difference.html

  

Jquery attr()vs prop()

jQuery.attr()
     

获取匹配元素集中第一个元素的属性值。

     

然而,

jQuery.prop()
     

获取匹配元素集中第一个元素的属性值。

     

在jQuery 1.6之前,attr()方法在检索某些属性时有时会考虑属性值,这会导致   不一致的行为。因此,引入了prop()方法。如   jQuery 1.6。 ,.prop()方法提供了一种显式方法   检索属性值,而.attr()检索属性。

     

究竟属性是什么?

     

属性带有关于HTML元素的附加信息   在name=”value”对。您可以为HTML元素设置属性   在编写源代码时定义它。

     

简单的例子可以是:

<input id="test" type="test" value="test">
here, "type","value", "id" are attributes of the input elements.

来自.prop() vs .attr()

  

我将总结主要问题:

     
      
  • 您通常需要prop()而不是attr()。

  •   
  • 在大多数情况下,prop()执行attr()过去做的事情。在代码中用prop()替换对attr()的调用通常是
      工作

  •   
  • 属性通常比属性更容易处理。
  •   
  • 属性值可能只是一个字符串,而属性可以是任何类型。例如,checked属性是一个布尔值   style属性是一个对象,每个对象都有各自的属性   风格,大小属性是一个数字。
  •   
  • 如果属性和具有相同名称的属性都存在,通常更新一个将更新另一个,但事实并非如此   对于某些输入属性,例如值和已检查:对于   这些属性,属性总是代表当前状态
      而属性(旧版本的IE除外)对应于   输入的默认值/检查度(反映在defaultValue中   / defaultChecked属性)。

  •   
  • 此更改删除了在属性和属性前面停留的一些魔法jQuery层,这意味着jQuery开发人员将   必须要了解一下属性与之间的区别   属性。这是件好事。

  •   

Jsfiddle尝试自己

答案 1 :(得分:0)

经过大量阅读和重新阅读后,我认为答案就是这样。 (而不是尝试仅提取适用于原始问题的部分内容,我认为为上下文提供完整的“规则”是有意义的。)

<强> 1。仅在

时使用.attr()
  • 获取/设置data- * attributes
  • 使用非1:1的属性/属性对(类似于锚元素上的href)

<强> 2。在所有其他情况下使用.prop()

第3。除了价值。使用.val()获取/设置输入值。

  • 请勿使用.attr('value')
  • 请勿使用.attr('value','foo')
  • 请勿使用.prop('value')
  • 不要使用.prop('value','foo')

我认为通过遵循这些规则,当您将值传递给.attr()时,属性发生的问题的答案最终会成为“谁在乎?”。如果要删除当前不推荐使用.attr('foo', 'bar')来设置属性值,那么.attr()对于.attr()有用的答案最终会“设置/修改data- * attributes”。

如果其他人在使用.prop()时可以考虑其他情况,那么请优先使用>>> len(set(map(lambda x: x["propertyB"] if 'propertyA' == {} else None ,l))) 1