« [お詫び] IE6 と IE7 共存の方法についての補足 | メイン | お金をもらってブログに記事を書くのは反倫理的行為か »

2006年12月04日

レビューポスターを1ページに複数はりつけられるようになりました あとで読む

IT戦記 - [JavaScript] とてもシンプルに自分自身が属する script 要素を取得 を早速活用させていただきました。(素晴らしすぎ。ありがとうございます!)

そしてようやくレビューポスターを一ページに複数貼り付けられるようになりました。

こんな感じです(RSSリーダーで見ている方はこちらへ)。

管理人ブログ人気記事
    ▼すべて表示
    generated by レビュー・ポスター

    レビューポスターのレビュー
      ▼すべて表示
      generated by レビュー・ポスター

      フレッシュリーダーのレビュー
        ▼すべて表示
        generated by レビュー・ポスター


        参考までに変更点をまとめておきます。
        #javascript 苦手なのでコードは見れたもんじゃありませんが…

        reviewposter.js が読み込まれたら、直前の id = reviewposter_itemlist を取得し、関連情報をそのオブジェクトに保存しただけ。この技ブログパーツでかなり役立ちそうです。



        // Thanks to IT戦記
        var reviewposter_currentscript = (function (e) { if(e.nodeName.toLowerCase() == 'script') return e; return arguments.callee(e.lastChild) })(document);
        // 周辺から id = reviewposter_itemlist を検索
        var reviewposter_itemlist = reviewposter_getelementbyid(reviewposter_currentscript, "reviewposter_itemlist");
        // 単純にscript要素の直前のブロック要素から深さ優先探索
        function reviewposter_getelementbyid(e, id)
        {
         if (e && e.previousSibling){
          var node = e.previousSibling;
          while(!node.innerHTML && node.previousSibling){
           node = node.previousSibling; // safari, opera
          }
          // こいつは childNodes を探索しているだけ
          var d = reviewposter_getelementbyid_recursive(node, id, 8);
          if (d) return d;
         }
         return document.getElementById(id);

        ※もちろん、これまで貼り付けたコードも1ページに1個であればそのまま動作します。

        そして貼り付ける方のコード変更がちと突貫。というか javascript 系はかなり微妙なのだけども・・・。貼り付け系はブログサービス屋さんによっては文字数制限もあるし・・・ごにょごにょ。

        旧貼り付けコードからの変更点:

        onclick="javascript:reviewposter_showitems();return false;"

          ↓

        onclick="javascript:reviewposter_showitems(this);return false;"

        (同じようなのがもう一箇所)


        検証環境は Windows - IE6, IE7, Firefox 2, Opera 8+, Mac - Safari 2, NN7, IE, Opera 8+ です。


        ちと話がそれますが、mac IE6 をサポートするために、setTimout() の第一引数に関数を設定できず、ちょっと苦労します。というかなんか気持ち悪い。

        ×setTimeout(function(){return some_function(param);}, 200);

        ○setTimeout("some_function()", 200);

        Ajax も使えないしそろそろ mac ie 捨てたいと思いつつ、まだまだ利用されているので悩ましい…。

        投稿者 aka : 2006年12月04日 20:30  / 2006年12月 / (~2006) レビュー・ポスター

        トラックバック

        人気ブログランキング - a++ My RSS 管理人ブログ

        このエントリーのトラックバックURL:
        http://133.242.136.64/mt-tb-sf.cgi/522

        コメント

        コメントしてください

        あわせて読みたい




        保存しますか?