Element.getAttributeNames()
getAttributeNames()
は Element
インターフェースのメソッドで、この要素の属性名を文字列の Array
で返します。要素に属性がない場合は、空の配列を返します。
getAttributeNames()
を getAttribute()
と共に使用すると、 Element.attributes
にアクセスするよりメモリ効率やパフォーマンスが良くなります。
getAttributeNames()
から返される名前は修飾属性名です。すなわち、名前空間接頭辞がついた属性であり、名前空間接頭辞(実際の名前空間ではない)にコロンが続き、属性名が続きます(例えば xlink:href
)。名前空間接頭辞のない属性は、そのままの名前になります(例えば href
)。
構文
let attributeNames = element.getAttributeNames();
例
以下の例は、次の方法を示しています。
- 名前空間接頭辞のある属性については、
getAttributeNames()
は属性名と一緒に名前空間接頭辞を返します。 - 名前空間接頭辞のない属性については、
getAttributeNames()
は属性名のみをそのまま返します。
以下のことを理解することが重要です。
- DOM には名前空間に所属していても、名前空間接頭辞がない場合があります。
- 名前空間に所属しているが、名前空間接頭辞のない DOM 内の属性については、
getAttributeNames()
は属性名だけを返し、その属性が名前空間に所属していることを示しません。
以下の例では、このような「名前空間に所属しているが、名前空間接頭辞がない」場合を示しています。
const element = document.createElement('a')
// "href" 属性を名前空間なし、名前空間接頭辞なしで設定
element.setAttribute('href', 'https://example.com')
// "href" 属性を名前空間あり、 "xlink" 名前空間接頭辞で設定
element.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 'https://example.com')
// "show" 属性を名前空間あり、名前空間接頭辞なしで設定
element.setAttributeNS('http://www.w3.org/1999/xlink', 'show', 'new')
// 要素の属性を反復処理する
for (let name of element.getAttributeNames()) {
let value = element.getAttribute(name);
console.log(name, value);
}
// 出力結果:
// href https://example.com
// xlink:href https://example.com
// show new
ポリフィル
if (Element.prototype.getAttributeNames == undefined) {
Element.prototype.getAttributeNames = function () {
var attributes = this.attributes;
var length = attributes.length;
var result = new Array(length);
for (var i = 0; i < length; i++) {
result[i] = attributes[i].name;
}
return result;
};
}
仕様書
Specification |
---|
DOM Standard # ref-for-dom-element-getattributenames① |
ブラウザーの互換性
BCD tables only load in the browser