DOM Attr类用法示例

时间:2017-06-23 09:10:12

标签: javascript html dom domdocument

我正在开发一个扩展DOM功能的项目,我无法提供Attr类存在的原因以及它可以用于什么的任何合理示例。

鉴于HTML属性始终只是字符串,例如<input type="date" name="your-birthday" />setAttribute原型上已存在getAttributeElement方法,这些方法可直接使用属性&# 39; s值为字符串。

可以使用Attr获取attr = element.attributes[0]对象的引用,然后可以使用attr.value = "updated value";之类的方法进行交互。

如果我没有直接使用Attr课程,我可以请某人开导我,因为它没有构造函数,据我所知也无法通过DOM中的任何方法?

参考:

1 个答案:

答案 0 :(得分:2)

有用的一点是,当DOM文档是XML document并且您想知道该属性的namespace URInamespace prefix时。

要理解为什么这可能特别有用,我将在Attr.namespaceURI(强调我的)上引用MDN文档:

  

根据Namespaces in XML规范,属性不会从其附加的元素继承其名称空间。如果未明确赋予属性名称空间,则它没有名称空间。< / p>

为了说明这一点,请考虑此示例,我们使用DOMParser解析XML字符串以创建XMLDocument实例:

我故意给<book>两个带有模糊本地名称id的属性,以说明它的用处。

&#13;
&#13;
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;
&#13;
&#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规范也不是