SQLの窓

2010年01月13日


JavaScript : ページが全て表示し終わった後に追加するイベント処理の具体的なサンプル

JUGEM ブログでAFPBB News より強制的に貼りこまれるニュースのテスト で使いました。
強制的に本文の先頭に追加されてしまうので、テーブルタグの中に DIV を作成してクラス名
を付けて、ダミーで基点を表す DIV を作り、その DIV にもクラス名を付けています。

要するに基点を全部取り出して、その親ノードから目的の場所を見つけて転送しています

ブログでは同一ページのどこに同じ構成があるか解らないので、ロードイベント
が一度しか実行されないように、jugem_afpbb() を何度も呼び出してもイベントが
登録されるのは一度だけです
<script type="text/javascript">
var jugem_afpbb_flg = 0;
function jugem_afpbb_get(obj,class_target) {
	var target;
	for( var i = 0; i < obj.length; i++ ) {
		if ( obj[i].className == class_target ) {
			target = obj[i];
			break;
		}
	}
	return target;
}

function jugem_afpbb_all() {
	var a = document.body;
	var b = a.getElementsByTagName("DIV");
	var c,d,e,f;
	for( var i = 0; i < b.length; i++ ) {
		if ( b[i].className == 'afpbb' ) {
			c = b[i].parentNode;
			d = c.getElementsByTagName("DIV")[0];
			e = jugem_afpbb_get(c.getElementsByTagName("DIV"),'afpbbtarget');
			f = jugem_afpbb_get(c.getElementsByTagName("DIV"),'afpbbItemAds');
			e.appendChild(d);
			e.appendChild(f);
		}
	}
}
function jugem_afpbb() {
	if ( jugem_afpbb_flg == 0 ) {
		if (window.attachEvent){
			window.attachEvent('onload', jugem_afpbb_all);
		}
		else {
			window.addEventListener('load', jugem_afpbb_all, false);
		}
		jugem_afpbb_flg = 1;
	}
}
</script>

ダミーは、クラス名を afpbb としています。
常にこのクラス名という前提で、jugem_afpbb() を呼び出します。
ページ上の全てのこのセクションを基点にして同じ記事内の 
afpbbtarget というクラス名を持つ DIV を探してニュースコンテンツ
を移動させます
<div class="afpbb"></div>
<script type="text/javascript">
jugem_afpbb();
</script>


<table calss=seesaa_tbl><tr> 
<td style='padding:30px;'> 
 
<div class=afpbbtarget style='width:300px;margin-left:0px;text-align:left'>
<!-- main(left) -->
</div> 
 
</td> 
<td style='vertical-align:top;text-align:left;padding:5px;'> 
 
<pre class=tbl_right> 
<!-- right  --> 
移動に成功しました。全てロード後なので、
ちょっと移動が遅れますが、いずれ PC の
パワーで意味無くなるでしょうし。
</pre> 
 
</td> 
</tr></table> 
 
 
<pre class=tbl_under style='padding:30px;'> 
<!-- under  --> 
</pre> 

もうかなりの間、以下のコードで運用しています。相当複雑なページで
動いているので基本的にこのままで問題は出ないと思います。こごでは、
ブラウザの違いを特に言及する必要が無いので、とにかくこれを使うと、
ページが全てロードされてから処理が可能になります。

例えば、処理をページの最後に書けないようなシステムでは、どこに書
いても最後に実行されるので、表示レスポンスの問題を除いて多用され
ている処理です
if (window.attachEvent){
	window.attachEvent('onload', jugem_afpbb_all);
}
else {
	window.addEventListener('load', jugem_afpbb_all, false);
}
※ addEventListener については、以下で詳しく説明されています
element.addEventListener - MDC


タグ:javascript
【記録の最新記事】
posted by lightbox at 2010-01-13 19:08 | 記録 | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり