SQLの窓

2012年02月03日


jQuery の each メソッドの『秘密の使い方』

本家のドキュメントにその記述が無かったんですが、ソースを読むと明らかに二通り
の使い方がありました。一つは、ドキュメントの通りに each の引数はコールバック
のみを渡して、第一引数はインデックス番号で、第二引数は this と同じものが使え
るというものです。

しかし、もうひとつでは each の引数にはコールバックともうひとつ配列を渡せるよ
うになっていて、その場合はそれぞれのコールバックの引数には配列の値が一つ一つ
渡されるというものです
<a href="#" target="_blank">001</a>
<a class="test" href="http://winofsql.jp" target="_blank">001</a>
<a class="test" href="http://toolbox.winofsql.jp" target="_blank">002</a>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1.7.1");
</script>
<script type="text/javascript">
// ドキュメントに無い使い方
$(".test").each(function(i,me){
	console.log(i+" "+me.href+" "+this.href);
},['これは',{href:"秘密の使い方"}]);

// 普通の使い方
$(".test").each(function(i,me){
	console.log(i+" "+me.href+" "+this.href);
});
</script>

以下はその該当部分( jquery-1.7.1.js )
※ callback.apply で呼び出しています

// args is for internal usage only
each: function( object, callback, args ) {
	var name, i = 0,
		length = object.length,
		isObj = length === undefined || jQuery.isFunction( object );

	if ( args ) {
		if ( isObj ) {
			for ( name in object ) {
				if ( callback.apply( object[ name ], args ) === false ) {
					break;
				}
			}
		} else {
			for ( ; i < length; ) {
				if ( callback.apply( object[ i++ ], args ) === false ) {
					break;
				}
			}
		}

	// A special, fast, case for the most common use of each
	} else {
		if ( isObj ) {
			for ( name in object ) {
				if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
					break;
				}
			}
		} else {
			for ( ; i < length; ) {
				if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
					break;
				}
			}
		}
	}

	return object;
},

この中では、each に渡されるオブジェクトが length の無い通常オブジェクト
も想定されているのですが、$( {} ) では動作しませんでした。もし、その場合
で動くのであれば、インデックスのかわりにプロパティ名が渡る事になっていま
す。
( ※ 動作しなかったと言うのは、配列扱いされてしまっていたという事です )


タグ:jquery
posted by lightbox at 2012-02-03 15:18 | メソッド:jQuery | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



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

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり