1

私は現在DOMに取り組んでおり、たとえばタグデータの場所をどのように変更できるのだろうか

要素を作成しました:

propElement = document.createElement("prop");

小道具はタグを開いています。

それで

propElement.setAttribute("name", "name1");

propElement.setAttribute("name2", "name2");

問題は、set メソッド name2 を name1 の後に配置したにもかかわらず、name1 の前にタグ name2 が表示されることです。

どうすれば注文を変更できますか?

(注: JavaScript ではなく、Java DOM API を使用しています。)

4

1 に答える 1

2

できません。要素の属性の順序は重要ではありません。実際、ライブDOMでは順序はありません。順序は、DOMのシリアル化された形式(HTMLマークアップなど)に関連してのみ存在するようです。それでも、無効なテキスト(以下で詳しく説明します)に関連する場合を除いて、順序には意味がありません。

属性は基本的に、オブジェクト(属性がアタッチされているDOM要素)の単純なプロパティです。それらに順序はまったくありません。実際、DOMでのそれらの表現は、NamedNodeMap「...特定の順序で維持されていない」ものです。

DOMがオブジェクトモデルを記述していることを覚えておくことが重要です。DOMのシリアル化された形式はテキスト(たとえば、DOMを定義するHTMLドキュメント)である場合がありますが、DOMはそうではありません。HTMLドキュメントでは、線形テキスト(上から下、左から右)であるため、当然、ある属性を定義するテキストは、別の属性を説明するテキストの前に置く必要がありますが、これ、結果のDOMオブジェクトは、順序がまったくないためです。したがって、この:

<div a="1" b="2">...</div>

これとまったく同じ要素を記述します:

<div b="2" a="1">...</div>

結果の要素は、値を持つ属性と値をdiv持つ属性を持つaです。a1b2

これは、プログラムソースのオブジェクトにプロパティを設定するのとまったく同じです。とプロパティのいくつかの仮説objを考えてみましょう。このコード:xy

obj.a = 1;
obj.b = 2;

...結果は次のコードとまったく同じオブジェクトになります。

obj.b = 2;
obj.a = 1;

...提供されab実際には単純なフィールド(副作用を引き起こす可能性のある非表示の関数呼び出しではありません)であり、これはDOMの属性に当てはまります。

DOMのテキスト(シリアル化)形式の属性の順序が重要になる可能性がある小さな方法が1つあり、それは無効なテキストにのみ関連しています。同じ属性が複数回指定された場合、最初に指定された値のみが使用されます。同じ属性を複数回指定することは無効です。値は結合されず、後続の値は前の値を上書きしません。最初のものだけが使用されます。

したがって、この無効なHTML:

<div class="foo" class="bar">...</div>

...実際にはdivwithになりますclass "foo""bar"まったく存在しません)。しかし、これは無効なシリアル化されたフォームを処理するための単なる対処メカニズムです。

于 2012-10-31T14:36:37.040 に答える