jquery.summary.js
[]

2011.01.15

このエントリーをはてなブックマークに追加
はてなブックマーク - jquery.summary.js

指定したセレクタ内の h1...h6 からTOCを生成する。デフォルトでは <div id="summary"></div> 内に生成される。

download

ソース

;(function($){
  var namespace = "createSummary";
  $.fn[namespace] = function(config) {
    var config = $.extend({
      where:'#summary'
    }, config);
    var target = this;
    $(config.where).append('<ul></ul>');
    var ul = '<ul style="margin-left:2em;"></ul>';
    var h = $(target).find('h1, h2, h3, h4, h5, h6');
    function getN(ele)
    {
      ele.nodeName.match(/(\d)/i);
      return RegExp.$1;
    }
   
    $.each(h, function(i, v)
    {
      var n = getN(v);
      var t = 'h'+n+'-'+i;
      var li = '<li>' + '<a href="#' + t + '">' + $(v).text() + '</a>' + '</li>';
     
      $(v).append('<a name="' + t + '"></a>');
     
      if(i <= 0){
        $(config.where + " ul:last").append(li);
      }
      else{
        var p_n = getN(h[i-1]); // prev n
       
        if(n < p_n){
          $(config.where + " ul:last").parents('ul:last').append(li);
        }
        else if(n > p_n){
          $(config.where + " li:last").append(ul);
          $(config.where + " ul:last").append(li);
        }
        else{
          $(config.where + " li:last").after(li);
        }
      }
    });
  };
})(jQuery);

使い方

<html>
<head>
<script type="text/javascript">
jQuery(function($){
  // div.entry 内の見出しタグ(h1 ... h6)から div#summary 内にTOCを生成
  $("div.entry").createSummary();
});
</script>
</head>
<body>

<div id="summary"></div>

<div class="entry">
    <h1>見出し1</h1>
    <h2>見出し2</h2>
    <h3>見出し3</h3>
</div>

</body>

jQueryで動的にformを作って送信する
[]

2010.05.09

このエントリーをはてなブックマークに追加
はてなブックマーク - jQueryで動的にformを作って送信する

検証環境

  • IE8
  • Chrome

コード

// 要jQuery

<script type="text/javascript">
$(function(){
  var form = '<form name="download" id="FormDownload" method="post" action="/index.php/convert/download">';
  form += '<input type="hidden" name="filename" value="'+filename+'" />';
  form += '</form>';
  $("body").append(form); // (1)
  $("#FormDownload").submit(); // (2) WebKit系:$(form).submit();
});
</script>

(1)

  • IEの場合はDOMに明示的に追加しないと送信されないようだ。
  • Chromeなどは(1)の行は不要で、(2)で $(form).submit() するだけで送信された。

デモ

IEのajaxリクエストのキャッシュではまる
[]

2009.11.06

このエントリーをはてなブックマークに追加
はてなブックマーク - IEのajaxリクエストのキャッシュではまる

IEでは同一URLのGETメソッドのajaxリクエストを自動でキャッシュするので、 それを防ぐために、URLにタイムスタンプ的なパラメータを付加する。

IEに限らず、一般的なキャッシュ防止処理。 てっきり、jQuery-1.3.2がうまいことやっててくれてると思ってた。

//// IEのajaxリクエストのキャッシュを防ぐ対策
var timestamp = '?timestamp='+(new Date()).getTime();
$.getJSON('/ajax' + timestamp, displayFileCallback );

GETメソッドはコンテンツの冪等性を保証する場合に使うからIEの仕様は正しい。 ちなみにjQueryにはpostJSONというメソッドはない、POSTメソッドでJSONを取得したい場合は以下のようにすればよい。

var mydata = {p:'v'};
$.post('/path/to/action', mydata, function(ret){
    // なんかコールバックが呼ばれたら行ないたい処理を記述.
}, "json");

jQueryからラジオボタンに値をセットする
[]

2009.09.05

このエントリーをはてなブックマークに追加
はてなブックマーク - jQueryからラジオボタンに値をセットする

$('#parent').click(function(){
  $("input[type=radio]", this).attr("checked", " ");
})