ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptによる構造マークアップの強化
キーポイント
cite
ブロック参照
function extractBlockquoteCitations() { var quotes = document.getElementsByTagName('blockquote'); for (var i = 0; i < quotes.length; i++) { var cite = quotes[i].getAttribute('cite'); if (cite) { var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite); a.appendChild(document.createTextNode('Source')); var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a); quotes[i].appendChild(p); } } }最初の例では、目立たないブロック参照要素を見てみましょう。この要素は、インデントの適用と間違っていることがよくありますが、その正しい使用法は、周囲のテキストから視覚的に分離する必要があるマーキング参照です。 Starting Block Reference Tagには、引用ソースページのURLを含むオプションの引用属性を持つことができます。 Citeプロパティの唯一の問題は、ブラウザがそれを完全に無視することです。タグの純粋主義者はそれを高く評価するかもしれませんが、純粋に実用的な観点からは、それを使用することは、正しいマークを使用することの満足度を得る以外には利点がありません。これがJavaScriptが入ってくる場所です。 DOMを使用して、Cite属性を使用して、任意のブロック参照の下部にある引用のソースにリンクを追加できます。これを行う関数コードは次のとおりです。
var quotes = document.getElementsByTagName('blockquote');
このコード行は、domメソッド
を使用して現在のページのすべてのブロック参照要素を見つけ、getElementsByTagName
(実際にはhtmlcollection」という名前の配列に割り当てますが、それは配列のように動作するデータ構造です)。 quotes
for (var i = 0; i < quotes.length; i ) { ... }
メソッドを使用して、要素から引用属性を取得します。 Citeプロパティが設定されている場合は、興味深い部分に進みます。引用の下部に「ソース」リンクを作成します。 getAttribute
var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite);
メソッドを使用してこれらの要素をプログラム的に作成することです。上記の行は、新しい「A」要素を作成し、HREFとタイトルの属性を割り当てます。どちらも引用のURLとして設定されます。 createElement
a.appendChild(document.createTextNode('Source'));
メソッドを使用して作成されます。 domはHTML要素をツリーを構成するものとして扱うため、新しく作成されたリンクにテキストを追加するには、そのcreateTextNode
メソッドを呼び出す必要があります。 appendChild
var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a);
を使用してリンクを追加します。この時点で、私たちが構築した新しいドキュメントフラグメントは、次のHTMLと同等です。
appendChild
<p> <a href="https://www.php.cn/link/a725c77dfdec0a53250d0709ed36e1fe" title="https://www.php.cn/link/a725c77dfdec0a53250d0709ed36e1fe">Source</a> </p>
quotes[i].appendChild(p);
は、現在取り組んでいるブロック参照要素です。 quotes[i]
新しい段落をブロック参照に添付して、表示するようにします。 appendChild
これは正常に機能しますが、より良くすることができます。 JavaScript関数は外部ファイルでホストされるため、外部ファイルが関数を実行することはより意味がありませんか?素朴なアプローチは、次のJavaScriptコードを使用することです。
window.onload = extractBlockquoteCitations;
//
関数の名前を提供しますが、最後に()を無視することに注意してください。これにより、関数が実行されます。 JavaScriptは機能的なプログラミングスタイルをサポートしています。つまり、関数はパラメーターとして渡され、データ構造に保存され、他のデータオブジェクトと同様に他の機能から返すことさえできます。このトピックについては、今後の投稿で詳しく説明しますが、その結果、関数をwindow.onload
に割り当てると、ページの読み込み後に実行されます。
に登録する最後のスクリプトは、実行する唯一のスクリプトになります。本当に必要なのは、すでにそこにあるものを上書きせずに、ウィンドウオブジェクトのオンロードハンドラーに関数を取り付ける方法です。残念ながら、Internet Explorerやその他のブラウザーは、このような動的なイベントの添付ファイルを処理する方法が異なります。以下は関数です:window.onload
function extractBlockquoteCitations() { var quotes = document.getElementsByTagName('blockquote'); for (var i = 0; i < quotes.length; i++) { var cite = quotes[i].getAttribute('cite'); if (cite) { var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite); a.appendChild(document.createTextNode('Source')); var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a); quotes[i].appendChild(p); } } }以下は、ウィンドウオブジェクトのロードイベントにブロッククォート関数を追加するコードです。
addEvent(window, 'load', extractBlockquoteCitations);
最後のステップは、CSSで引用をスタイリングすることです。これは、ブロック参照を処理する比較的単純なCSSコードスニペットです。
完成品はここで見ることができます。
function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, false); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } }パネルスイッチ
さて、より高度な動的効果、つまりパネルスイッチャーを考えてみましょう。ここでの目標は、ページに複数のパネルを配置し(Divタグを使用)、一度に1つのパネルのみを表示することです。常に表示されるリンクのセットを使用して、現在表示されているパネルを選択できます。これは、タブを選択するたびにページを更新せずに、タブ付きインターフェイスを構築して、関連するさまざまな画面を閲覧するのに役立ちます。
それから、これは機能する最も簡単なマークです:
`
パネル1
|驚くべきことに、上記は、目的の効果を作成するためにいくつかのJavaScriptをフックするために必要なほぼすべてのマークアップです。上記のコードを続けることができますが、リンクにクラスを追加して、特別な運用を実行したいことを明確にしましょう。
<a href="https://www.php.cn/link/65dfa16ba6de9bdb34ea435c9fe2a425" class="toggle">Panel 1</a> | <a href="https://www.php.cn/link/379d08c7a38df48c777c07ea990a3bcf" class="toggle">Panel 2</a>
以下は、JavaScriptの仕組みです。ページが読み込まれると、スクリプトは、クラスに「トグル」を含むリンクをページ上のすべてのリンクをスキャンします。見つかったリンクの場合、HREF属性がチェックされ、指定された要素が配置され、ターゲット要素アレイに追加されます。最初の要素を除く他のすべての要素は「閉じている」ため、ページがロードされると、最初のパネルのみが表示されたままになります。リンク自体は、JavaScriptイベントハンドラーを添付して、それらがアクティブ化されると、対応するパネルを表示できるようにします。
完全なスクリプトはここで見ることができます。以下は、コードの仕組みについての段階的な説明です。
var et_toggleElements = [];
/* Initialisation */ function et_init() { var i, link, id, target, first; first = true; for (i = 0; (link = document.links[i]); i ) { ... }
var
if (/btoggleb/.exec(link.className)) { ... }
この条件は、現在リンクされているクラスに「トグル」が含まれているかどうかをチェックします。クラスのプロパティには、スペースで区切られた複数のクラスを含めることができるため、
は、正規表現です。 link.className == 'toggle'
/btoggleb/
b
リンクされたクラスリストにトグルが含まれている場合、リンクのターゲットがURLスニペットであると仮定します。 id = link.href.split('#')[1];
#タグでリンクhrefを分割する - 興味のある部分は#の後であることがわかっているため、
を使用して結果配列を直接インデックスしてターゲットIDを抽出します。
link.href.split('#')
[1]
ここで、リンクが要素が存在することを示すという別の仮定を立てます。 getElementById()
メソッドを使用して要素を取得し、アレイの現在の長さに等しい配列インデックスに割り当てて、要素の配列に追加します。これは、配列が0からインデックス作成を開始するため、配列の長さはアレイの次の空のスロットのインデックスでもあります。
if (first) { first = false; } else { target.style.display = 'none'; }
これは、私たちが以前に定義した最初のロゴが登場する場所です。 Webサイトの最初のパネルが表示されたままになりますが、他のパネルはCSSの「表示:なし」に相当するJavaScriptを使用して隠されています。このフラグを使用すると、これを行うことができます。
link.onclick = et_toggle;
最後に、et_toggle
関数をリンクされたonclick
イベントに割り当て、リンクがアクティブになるたびに関数が呼び出されます。次のステップは、関数を定義することです。
function extractBlockquoteCitations() { var quotes = document.getElementsByTagName('blockquote'); for (var i = 0; i < quotes.length; i++) { var cite = quotes[i].getAttribute('cite'); if (cite) { var a = document.createElement('a'); a.setAttribute('href', cite); a.setAttribute('title', cite); a.appendChild(document.createTextNode('Source')); var p = document.createElement('p'); p.className = 'blockquotesource'; p.appendChild(a); quotes[i].appendChild(p); } } }
繰り返しますが、split
メソッドを使用して、リンクからIDを抽出します。
表示するパネルがわかります。要素配列を繰り返して、IDが目的のパネルのIDと一致する要素を除く他のすべての要素を閉じることができます。
falseを返すことにより、アクティブ化されたときにリンクが実際に追跡されるのを防ぎます。
最後のステップは、前述のaddEvent
関数を使用して、ウィンドウの荷重イベントにet_init
関数を登録することです。
addEvent(window, 'load', et_init);
ここで実行中の完了コードを表示できます。
さらに読み取り
JavaScriptは、ドキュメントオブジェクトモデル(DOM)を介してHTML要素と相互作用します。 Domは、JavaScriptが動作できるWebページの構造を表します。たとえば、javaScriptはdocument.createTextNode()
メソッドを使用して新しいテキストノードを作成し、既存のHTML要素に追加できます。
JavaScriptのテキストノードは、要素または属性のテキストコンテンツを表すノードタイプです。 document.createTextNode()
メソッドを使用して作成できます。このメソッドは、既存のHTML要素に添付できる新しいテキストノードを作成し、Webページにテキストを動的に追加できるようにします。
javaScriptはいくつかの方法でHTMLに追加できます。