blockquote要素の属性を抜き出し表示するjavascript

| コメント() |
||

blockquote要素のcite属性・title属性を抜き出し引用文後に表示するjavascriptの紹介です。

今回紹介するスクリプトは、blockquote要素の属性cite要素とtitle要素を抜き出し、引用文の後に表示するjavascriptです。前回のエントリー簡単に引用マークアップ(blockquote要素)を生成できる-javascriptとセットで使うといいです。

このスクリプトは、Enhancing Structural Markup with JavaScript [JavaScript & AJAX Tutorials]のエントリーで紹介されているものをカスタマイズしてみました。


blockquote要素のcite属性・title属性を抜き出し表示するjavascript

blockquote要素の引用文後に新たに<p></p>要素を作り、cite属性・title属性をその中に流し込むようにしています。

同一ページに複数blockquote要素があっても各要素毎での属性値を抜き出します。

このスクリプトは、Enhancing Structural Markup with JavaScript [JavaScript & AJAX Tutorials]のエントリーで紹介されているものをカスタマイズしたものです。

上記のコードをページ<head></head>の間に追加することでページが読み込まれた後に処理が実行されます。

新しく生成する<p></p>要素には、CSSのクラス指定を設定してあります。適宜ご自分の好きな設定に変えてください。

正直なところ、コードが長すぎるような気がします。もう少しスマートにできる方是非アドバイスください。トラックバック・コメントお待ちしています。

  • p.blockquotetitle--参照元タイトル名
  • p.blockquoteurl--参照元URIリンク

サンプル

どんな感じで抜き出し表示されるかのサンプルページを用意しました。ボタンをクリックしてください。

blockquote要素の属性を抜き出し表示するjavascript

Enhancing Structural Markup with JavaScriptのスクリプトコード

Enhancing Structural Markup with JavaScript [JavaScript & AJAX Tutorials]のエントリーで紹介されているスクリプトは以下の通り

上記のコードはblockquote要素の属性cite要素を抜き出して"Source"というアンカーテキストリンクとして引用文の後に表示するjavascriptです。

p要素のclass指定もされていますので、スタイルシートでp.blockquotesourceを自分で設定することで表示変更することができます。

イベント処理に関しては、二つのパターンが紹介されています。javascriptが正しく機能するように後者のイベント処理(addEventListener、attachEvent)をするように設定します。

前者は、スクリプトにwindow.onload =イベントを追加するかbody onload=body要素にイベント追加することで実行する方法です。

body要素に追加する場合は、

<body onload="extractBlockquoteCitations();">

上記のwindow.onload =イベントを追加した場合は以下のようになります。

window.onload =

ページの読み込みが完了した時に発生するイベントハンドラ

参照JavaScript リファレンス

イベントの追加

同一ページで複数のイベント処理が設定されている場合、以前からのデータを変更することなくイベント追加するようにすることが望ましいので、こちらのスクリプトでイベント処理をすることを推奨しています。

addEventListenerイベントはIEでは機能しないのでattachEventで処理を実行するよに命令設定されています。

addEventListener()

同一のイベントに複数のイベントハンドラ(処理する関数、命令)を追加できる。

このaddEventListeneraddEventListenerイベント処理に関して参考になるページは第五章 クライアントサイドの技術:各種イベントについてです。

カスタマイズ

上記のEnhancing Structural Markup with JavaScript [JavaScript & AJAX Tutorials]のエントリーで紹介されているコードだと"Source"というパターンで表示されてしまいますので、カスタマイズします。

a.appendChild(document.createTextNode('Source'));

の行を以下の通りにします。

a.appendChild(document.createTextNode(a));

これでアドレス(URI)がアンカーテキストとして表示されるようになります。

引用元のページタイトル指定も表示させるために以下のコードを追加しています。(blockquote要素にtitle属性が指定してある場合)

title属性に値がある場合は、引用元:「title属性値」で表示されます。

値が無い場合は、引用元:で表示されるようにしています。

javascriptコード解説

var 任意ネーム = 識別子
変数(値が変わる)を設定する。コード参照へ戻る
document.getElementsByTagName()
()内に指定する要素名を参照するメソッド
今回の場合、blockquote要素を参照している
for (初期値;条件;変化式){命令文....}
条件の間処理を繰り返し実行する。コード参照へ戻る

今回の場合、変数iは0であると設定し、quotes.length(blockquote要素の数)の数まで条件を設定、i++で変数iに1ずつ加算してゆく設定になっているので、0からblockquote要素の数まで{命令文....}を1回ずつ実行する

length

引数(ひきすう、argument=実引数 または parameter=仮引数)とは、プログラミング言語において関数やメソッドを呼び出すときに、その関数やメソッドを実行するために渡す値のこと。

要素.lengthで要素数の値となります。

要素.getAttribute('属性')
指定する要素の属性を取得するメソッド。コード参照へ戻る

今回の場合は、quotes[i]で各blockquote要素毎のcite属性を取得しています。

if(条件式)命令1{;else命令2;}
条件式に合致した場合、命令1を実行し、合致しない場合はelse文以下の命令2を実行します。

今回の場合は、cite属性が取得できた場合に指定する命令を実行する条件式となっています。

document.createElement('要素')

指定タグ名で新しい要素を作るメソッドコード参照へ戻る

今回の場合は、a要素を新しく生成し、変数aと設定しています。

要素.setAttribute('属性', 値);

指定する要素の属性値を変更するメソッド

今回の場合は、新しく生成するa要素の属性(hreftitle)にcite要素(var citeで設定された値)に変更するようになっています。

要素.appendChild()
指定する要素に()内に指定する子ノードを追加するメソッドコード参照へ戻る

今回の場合は、a要素にdocument.createTextNode('Source')での値を追加します。

ノード:DOM(Document Object Model)のwindow要素を頂点としたツリー構造でのの各要素や属性の一つ一つをノードといいます。今回はDOMのツリー構造でいうと、window>document>a>herfということになります。window要素の孫ノードaの子ノードherfという解釈になります。

例えば、img要素から見るとはimg要素が親ノードでimg要素の持つ属性(src,title,width....)が子ノードということになります。

document.createTextNode()

新しくテキストノードを追加するメソッド

今回の場合は、a要素の子ノードに"Source"というテキストを追加するようになっています。

今回のjavascript参照元

Enhancing Structural Markup with JavaScript [JavaScript & AJAX Tutorials]
http://www.sitepoint.com/article/structural-markup-javascript

参考サイト

Ajaxを勉強しよう
http://www.openspc2.org/JavaScript/Ajax/Ajax_study/index.html
JavaScript DOM リファレンス
http://www.openspc2.org/JavaScript/JavaScript_DOM/index.html
JavaScript リファレンス
http://www.openspc2.org/JavaScript/reference4/index.html
Comments for this entry on FriendFeed.

使用レンタルサーバー
VALUE DOMAINバリュードメイン
VALUEDOMAIN.COM年間2400円で3GB、データベース5個作成可能

今現在の関西電力使用状況は以下のグラフのとおりとなります。

関西電力使用状況
Webサービス by Yahoo! JAPAN

人気アクセスランキング

コメント

大阪マラソン開催まで、あと

神戸マラソン開催まで、あと

このブログ記事について

このページは、cool_ni_ikouが2006年11月27日 09:33に書いたブログ記事です。

ひとつ前のブログ記事は「簡単に引用マークアップ(blockquote要素)を生成できる-javascript」です。

次のブログ記事は「Uniqro.comのサイトコンテンツがボリュームアップ」です。

edit

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.28-ja