.getElementsByTagNameNS()

与えられた名前空間に沿って、与えられた名前のタグを持つ要素のリストを返します。 ルートノードを含め、ドキュメント全体が検索されます。

文法

elements = document.getElementsByTagNameNS(namespace, name)
引数 説明
namespace 検索対象の要素の名前空間URIを指定します。 (element.namespaceURI 参照)
name 検索のためのローカル名、または全ての要素にマッチする特別な値"*"のどちらかを指定します。 (element.localName参照)
戻り値
elements 検出された実稼働中の要素が、 ツリー内で現れた順に並べられたNodeList(ただし、後述する注意を参照)として返されます。

注意: W3Cの仕様では返される要素(elements)はNodeListとされていますが、 このメソッドはGeckoとInternet Explorerは、HTMLCollectionを返します。 OperaはNodeListを返しますが、これにはHTMLCollectionと同じになるように、 namedItemメソッドが実装されています。(翻訳に自信なし) 2012年1月時点では、WebKitのブラウザだけが純粋なNodeListを返します。 詳細は、bug 14869を参照。

下記の例では、getElementsByTagNameNS()は特定の親要素から開始して、 親要素からDOMを通ってトップダウンで再帰的に検索を行い、 タグのnameパラメーターにマッチする子要素を探します。

getElementsByTagNameNS()がdocumentノードでは無いノード上で実行された場合、 実際にはelement.getElementsByTagNameNS()メソッドが使用されることに注意してください。

下記の例を使用するのに必要な事は、.xhtml拡張子の新しいファイルへ、コピー・ペーストして保存するだけです。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>getElementsByTagNameNS example</title>
<script type="text/javascript">

function getAllParaElems()
{
  var allParas = document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "p");
  var num = allParas.length;
  alert("There are " + num + " &lt;p&gt; elements in this document");
}

function div1ParaElems()
{
  var div1 = document.getElementById("div1")
  var div1Paras = div1.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "p");
  var num = div1Paras.length;
  alert("There are " + num + " &lt;p&gt; elements in div1 element");
}

function div2ParaElems()
{
  var div2 = document.getElementById("div2")
  var div2Paras = div2.getElementsByTagNameNS("http://www.w3.org/1999/xhtml", "p");
  var num = div2Paras.length;
  alert("There are " + num + " &lt;p&gt; elements in div2 element");
}

</script>
</head>

<body style="border: solid green 3px">
<p>Some outer text</p>
<p>Some outer text</p>

  <div id="div1" style="border: solid blue 3px">
    <p>Some div1 text</p>
    <p>Some div1 text</p>
    <p>Some div1 text</p>

    <div id="div2" style="border: solid red 3px">
    <p>Some div2 text</p>
    <p>Some div2 text</p>
    </div>
  </div>

<p>Some outer text</p>
<p>Some outer text</p>

<button onclick="getAllParaElems();">
 show all p elements in document</button><br />

<button onclick="div1ParaElems();">
 show all p elements in div1 element</button><br />

<button onclick="div2ParaElems();">
 show all p elements in div2 element</button>

</body>
</html>

サポートしていないブラウザでの回避策

希望するブラウザがXPathをサポートしていなかった場合、 望んだローカル名と名前空間の全てのタグを見つけ出す別のアプローチ(その全ての子を通してDOMを探し、 全ての@xmlnsインスタンスを識別するといったような)が必須となりますが、XPathの方が断然早く動作します。(翻訳に自信無し) Internet Explorerに対応するために(Internet Explorerは別のAPIでXPathをサポートしているため)、 下記の関数無いでXPathの代わりに、XPathラッパーを呼び出して対応します。(翻訳に自信無し)

function getElementsByTagNameNSWrapper (ns, elName, doc, context) {
	if (!doc) {
		doc = document;
	}
	if (!context) {
		context = doc;
	}

	var result = doc.evaluate('//*[local-name()="'+elName+'" and namespace-uri() = "'+ns+'"]', context, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

    var a = [];
    for(var i = 0; i < result.snapshotLength; i++) {
        a[i] = result.snapshotItem(i);
    }
    return a;
}

仕様

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。