Shadow DOMでHTMLのとを使用する方法
HTMLスロット W3Cによって作られた最も注目に値する標準の1つです。それを別の印象的なW3C規格と組み合わせます テンプレート, そして、あなたは一緒に働くための素晴らしい調合を持っています。できる HTML要素を作成および追加する ページへ JavaScriptを使う 必要かつ重要な仕事です.
コードスニペットが必要なときに便利です。 特定の時期にのみ出現する, あるいは、何百もの同じように構造化されたHTML要素をタイプアウトしたくないが、 プロセスを自動化する.
JavaScriptでHTML要素を作成することは あまり望ましくない. それはあなたがすべてのタグをカバーしているかどうかをチェックして再チェックしなければならない面倒なことです。 も 入力して追跡するために多くのこと。この混乱、しかし, 解決策を得た とき タグが登場しました。何かが必要な場合 動的にページに追加された, あなたはそれを中に入れることができます
素子.
この記事では、私はあなたがどのようにあなたが使うことができるかをあなたに示すつもりです。
そして JavaScriptと一緒にタグ ミニHTMLテーブルファクトリを作成する それは何百もの似たようなテーブルを作成して生成することができます.
の
そして
タグ
の tagはHTMLコードを保持します。 ブラウザによってレンダリングされません JavaScriptを使用して、ドキュメントに正しく追加されるまでの
タグは Shadow DOMに追加したプレースホルダー の内容で構成することができます 素子.
A シャドウDOM 通常のDOM(HTMLから解析された文書モデル)に似ています。それ スコープツリーを作成します (Shadow DOMツリー) それ自身の根 そしてまた持つことができます 独自のスタイル.
メインドキュメントの要素にShadow DOMツリーを挿入すると、その要素は次のように呼ばれます。 シャドウホスト -, でマークされているシャドウホストのすべての子要素 スロット
属性(前述と同じではありません)
タグ)意志 新しく挿入されたサブツリーでそれらの場所を取ります.
この記事を書いている時点(2017年7月)のShadow DOMは、 WebKitおよびBlinkベースのブラウザでのみサポートされています しかし、あなたはいつでもCanIUseでブラウザサポートの実際の状態をチェックすることができます.
HTMLを設定する
それでも混乱しますか?で始まるコードを見てみましょう。 素子.
内部 テンプレート内, 私も追加しました いくつかの基本的なスタイル テーブルの場合は、 テンプレートの外側, 二つあります 各 現在のところ、ページに表示されるのはスパンに含まれるテキスト文字列だけなので、JavaScriptも追加する必要があります。. Javascriptを使用して、テンプレートの内側から両方のdivにテーブルを挿入します。 Shadow DOMツリーとして. 挿入後、スパンはテーブル内のそれぞれのスロットに配置され、目的の列タイトルまたはセル値が表示されます。結果は 2つの自動生成表 同じテンプレートを使用している. まず、Shadow DOMがユーザーのブラウザでサポートされているかどうかを確認する必要があります。の というカスタム変数を作成します。 の中 がある 二 その後、私たち テンプレートの内容のコピーを追加する を使用してShadow DOMツリーに そして、私たちの動的HTMLテーブルの準備ができました。Chromeの出力は次のようになります。, あります
私たちは 青写真として使う にとって いくつかのテーブルを作成する それは文書に追加されます。がある
テーブルセル内の要素( そして ) プレースホルダーとして機能する 列タイトルとセル値について。各スロットはユニークな 名
その属性 それを識別する.
タグ.
, ページに追加したい2つの別々のテーブルの場合.
要素は
スロット
どの値の属性 に等しい 名
値 対応する
内側のタグ .
Shadow DOMツリーを添付する
attachShadow()
方法 Shadow DOMツリーを要素に添付します そしてそのShadow DOMツリーのルートノードを返します。の もし
以下のコードの条件は、ブラウザがページ上のdivが attachShadow
方法. // Shadow DOMがサポートされているかどうかを確認します。(document.createElement( 'div')の 'attachShadow') else console.warn( 'attachShadowはサポートされていません');
templateContent
それ 参考になる テンプレートの内容へ. if( 'attachShadow' document.createElement( 'div'))let templateContent = document.querySelector( 'template')。content; divs = document.querySelectorAll( 'div');とします。 divs.forEach(function(div)//内部ループ);それ以外の場合console.warn( 'attachShadowはサポートされていません');
forEach
ループ、Shadow DOMツリーは 各divに添付 (div.attachShadow(mode: 'open')
).モード
オプション にとって attachShadow
: 開いた
そして 閉まっている
. もし 閉まっている
Shadow DOMツリーのルートノードに選ばれた アクセスできない 外部のDOM要素およびオブジェクトへの.templateContent.cloneNode(true)
方法. if( 'attachShadow' document.createElement( 'div'))let templateContent = document.querySelector( 'template')。content; divs = document.querySelectorAll( 'div');とします。 divs.forEach(関数(div)div.attachShadow(モード: 'open')。appendChild(templateContent.cloneNode(true)));それ以外の場合console.warn( 'attachShadowはサポートされていません');