根据文档,get_attribute实际上返回属性而不是属性,除非该属性不存在,在这种情况下,它会退回到该属性。
get_property将始终返回该属性。
是否有一种始终获取属性的方法?我觉得奇怪的是,一个名为“ get_attribute”的函数会优先考虑属性值而不是属性值。
答案 0 :(得分:2)
get_attribute(attribute_name)获取元素的给定attribute
或property
。
此方法将首先尝试返回具有给定名称的属性的值。如果不存在具有该名称的属性,它将返回具有相同名称的attribute
的值。如果没有attribute
的名称,则返回 None
。
被认为是真实的值,等于true
或false
,以布尔值形式返回。所有其他非None
值都作为字符串返回。对于不存在的属性,返回None
。
Args:
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)获取元素的给定属性。
Args:
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以创建标签的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中恢复“原始”值,则该值位于属性中。