我正在开发一个扩展DOM功能的项目,我无法提供Attr
类存在的原因以及它可以用于什么的任何合理示例。
鉴于HTML属性始终只是字符串,例如<input type="date" name="your-birthday" />
,setAttribute
原型上已存在getAttribute
和Element
方法,这些方法可直接使用属性&# 39; s值为字符串。
可以使用Attr
获取attr = element.attributes[0]
对象的引用,然后可以使用attr.value = "updated value";
之类的方法进行交互。
如果我没有直接使用Attr
课程,我可以请某人开导我,因为它没有构造函数,据我所知也无法通过DOM中的任何方法?
参考:
Attr
课程:https://developer.mozilla.org/en-US/docs/Web/API/Attr getAttribute
:https://developer.mozilla.org/en/docs/Web/API/Element/getAttribute setAttribute
:https://developer.mozilla.org/en/docs/Web/API/Element/setAttribute hasAttribute
:https://developer.mozilla.org/en/docs/Web/API/Element/hasAttribute 答案 0 :(得分:2)
有用的一点是,当DOM文档是XML document并且您想知道该属性的namespace URI或namespace prefix时。
要理解为什么这可能特别有用,我将在Attr.namespaceURI
(强调我的)上引用MDN文档:
根据Namespaces in XML规范,属性不会从其附加的元素继承其名称空间。如果未明确赋予属性名称空间,则它没有名称空间。< / p>
为了说明这一点,请考虑此示例,我们使用DOMParser
解析XML字符串以创建XMLDocument
实例:
我故意给<book>
两个带有模糊本地名称id
的属性,以说明它的用处。
const XML = '<?xml version="1.0" encoding="utf-8"?>\
<books xmlns:lib="http://example.com/xml/library">\
<book id="book-one" lib:id="1">\
</book>\
</books>';
var parser = new DOMParser;
var doc = parser.parseFromString( XML, 'application/xml' );
// is our Document an instance of XMLDOcument?
console.log( doc instanceof XMLDocument );
// fetch all Attr instances of the first <book> element
var attributes = doc.querySelector( 'book' ).attributes;
for( var attribute of attributes ) {
// output namespace info about the Attr instance
console.log( attribute.localName, attribute.prefix, attribute.namespaceURI, attribute.value );
}
&#13;
另一个用例是,如果您想将Attr
节点移动到另一个Element
:
div2.setAttributeNode( div1.removeAttributeNode( div1.getAttributeNode( 'class' ) ) );
当然,我不认为上面的例子是常见用法的典范。这可能是Element.getAttributeNode()
,Element.getAttributeNodeNS()
,Element.setAttributeNode()
和Element.setAttributeNodeNS()
为marked as obsolete on MDN的原因。
但是,w3c.org上的DOM规范尚不明确(请参阅8.2 DOM Core
部分中的警告),whatwg上的DOM规范也不是