質問

答えた後 この質問 なぜだろうという疑問が残ります removeChild 親要素が必要です。結局のところ、単純にできるのは、

node.parentNode.removeChild(node);

親ノードは常に Javascript/DOM エンジンで直接利用できる必要があるため、削除するノードの親ノードを指定することは厳密には必要ありません。

もちろん原理は理解していますが、 removeChild は DOM ノードのメソッドですが、なぜ次のようなものがないのでしょうか document.removeNode 存在しますか (パラメータとして任意のノードを受け入れるだけです)?

編集: より明確に言うと、質問は次のとおりです。削除する(一意の)ノードが既にあるのに、なぜJSエンジンに親ノードが必要なのでしょうか?

役に立ちましたか?

解決

シンプルなデザインが保たれていると思います。ノード 5月 孤立して存在しますが、より興味深いのは DOM ツリーです。と removeChild, 、削除するノードは、メソッドが呼び出されたノードの子である必要があります。

すべての子のリストを取得し、それぞれを手動で比較することは、それほどコストのかかる操作ではありません。ただし、削除するノードをすべての子孫から検索するのは確かにコストがかかります。

編集:更新に応じて、ブラウザは単に DOM仕様, を定義します。 removeChild メソッドオン Node. 。スペックとしては、 私の意見では, 、明確であり、仮定がないものでなければなりません。に似ています 依存関係の注入 その観点から。DOM コア仕様は、ノード、要素などの構成要素を使用してツリーをモデル化します。次のような単独のメソッドを追加します。 removeNode これらの構成要素のどこかで、メソッドがその環境に関する暗黙の知識を持っていること、つまり、メソッドがその環境についての暗黙の知識を持っていることを意味します。 may 何らかのノードの子である場合は、そこから削除する必要があります。

w3 のタスクは、ほとんどのことを可能にする非常に堅牢な API を作成することです。適切に記述されていれば、ネイティブ API を中心にいつでも記述できるため、糖衣構文について心配する必要はありません。

他のヒント

混乱の原因は、要素を削除するということが、要素を削除したり破壊したりするような意味だと考えているためかもしれません。

enter image description here

しかし実際には、その概念は、 除去 基本的には、子供とその親の関係を壊すことを意味します。それはただの別離です。

enter image description here

したがって、親ノードを持たない要素を削除しても意味がありません。そして、親と子の間のつながりを断ち切りたい場合は、両方への参照が必要になるのは当然です。

そうは言っても、親のことをまったく気にせずに、単に子を親から削除したい場合があるのは事実です。そのため、DOM レベル 4 では ChildNode インターフェイスは、 remove 方法。

そのインターフェースは次のように実装されています DocumentType, Element そして CharacterData, で使用できます。 ドキュメントタイプ, 要素 そして Text, Comment, 、 そして ProcessingInstruction ノード.

仮定すると node これらのいずれかです。使用できます

node.remove();

すでに親ノードがない場合は、何も起こりません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top