2

根据文档,get_attribute实际上返回属性而不是属性,除非属性不存在,在这种情况下它会回退到属性。

get_property将始终返回该属性。

有没有办法始终获取属性?我发现一个名为“get_attribute”的函数会优先考虑属性值而不是属性值,这很奇怪。

4

1 回答 1

2

获取属性(属性名称)

get_attribute(attribute_name)获取给定的attributeproperty元素。

此方法将首先尝试返回具有给定名称的属性的值。如果不存在同名的属性,则返回attribute同名的值。如果没有attribute该名称,None则返回。

被认为是真实的值,即等于truefalse,作为布尔值返回。所有其他非None值都作为字符串返回。对于不存在的属性或属性,None返回。

  • 参数:

    attribute_name - Name of the attribute/property to retrieve.
    
  • 例子:

    # Check if the "active" CSS class is applied to an element.
    is_active = "active" in target_element.get_attribute("class")   
    

获取属性(属性名称)

get_property(property_name)获取元素的给定属性。

  • 参数:

    property_name - Name of the property to retrieve.
    
  • 例子:

    text_length = target_element.get_property("text_length")
    

听起来还是很相似?参见下文 ...


属性和属性

当浏览器加载页面时,它会解析HTML 并从中生成 DOM 对象。对于元素节点,大多数标准 HTML 属性自动成为 DOM 对象的属性。

例如,如果标签是:

<body id="page">

那么 DOM 对象有body.id="page".

注意:属性-属性映射不是一对一的!


HTML 属性

在 HTML 中,标签可能具有属性。当浏览器解析 HTML 为标签创建 DOM 对象时,它会识别标准属性并从中创建 DOM 属性。

因此,当一个元素具有 id 或另一个标准属性时,就会创建相应的属性。但如果属性是非标准的,则不会发生这种情况。

注意:一个元素的标准属性对于另一个元素可能是未知的。例如,type<input>标签的标准属性,而不是<body>标签的标准属性。标准属性在相应元素类的规范中进行了描述。

因此,如果一个属性是非标准的,则不会有它的 DOM 属性。在这种情况下,可以使用以下方法访问所有属性:

  • elem.hasAttribute(name): 检查是否存在。
  • elem.getAttribute(name): 获取价值。
  • elem.setAttribute(name, value): 设置值。
  • elem.removeAttribute(name): 删除属性。

读取非标准属性的示例:

<body something="non-standard">
  <script>
    alert(document.body.getAttribute('something')); // non-standard
  </script>
</body>

属性-属性同步

当标准属性更改时,相应的属性会自动更新,并且(有一些例外)反之亦然。但也有例外,例如input.value仅从attribute-> 同步到property,但不同步。这个特性其实派上用场了,因为用户可以修改值,然后在它之后,如果我们想从 HTML 中恢复“原始”值,它就在属性中。

于 2019-04-25T08:27:17.027 回答