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