jQuery

【jQuery】画面遷移直前にajax通信を行う。

めも。

beforeunloadイベントに同期ajax処理をかませればOK。

$(window).bind('beforeunload', function(event) {
	$.ajax({
		async: false
	});
});

上記の通り、ajaxのasyncパラメーターをfalseにすれば正常にajax通信を完了してから画面遷移を開始してくれる。
ここでasyncがtrue、または未指定になっている場合、ajax通信が完了する前に画面遷移が行われてしまうので注意されたし。

 

【jQuery】画面遷移時に確認ダイアログを出す。

メモ。

$(window).bind('beforeunload', function(event) {
	return '確認メッセージ';
});

 

【jQuery】jQueryのバージョンを確認する。

めも。

alert($.fn.jquery);

 

【jQuery】全てのイベントにアクションをバインドする。

めも。

function getAllEvents(element) {
    var result = [];
    for(var key in element) {
        if(key.indexOf('on') === 0) {
            result.push(key);
        }
    }
    return result.join(' ');
}

上記関数を下記のようにして用いる。

$('selector').bind(getAllEvents($('selector')[0]), function(e) {
	// 任意の処理
});

これでon…という名のイベント全てに同一の挙動を適用することができる。

 

【jQuery】セレクタに否定条件を渡す。

指定したタグを除外したい時。
:notセレクタを用いて下記のように指定すればok。

// 子要素の中でbr, hr, img, meta, input要素以外のものを取得する。
var nodes = parent.children(':not(br, hr, img, meta, input)');

といった感じ。

 

【jQuery】変数が空か判定する。

下記リンクにめちゃくちゃ便利でシンプルなプラグインがおいてあったのでメモ。

http://www.laktek.com/2011/01/07/jquery-isblank/

jQueryにisBlank()関数を追加する。

(function($){
	$.isBlank = function(obj){
		return(!obj || $.trim(obj) === "");
	};
})(jQuery);

実行結果は下記の通り。

$.isBlank(" ") //true
$.isBlank("") //true
$.isBlank("\n") //true

$.isBlank("a") //false

$.isBlank(null) //true
$.isBlank(undefined) //true
$.isBlank(false) //true
$.isBlank([]) //true

ふぉぉぉぉい!めっちゃ便利!!

 

【jQuery】CSSを動的に読み込む。

jQueryプラグインにしてみた。といってもそんなにたいそうなことはしていない。
一応重複ロード機能付き。

(function($) {
	$.loadCss = function(href) {
		var links = $('head > link');
		$.each(links, function(key, elem) {
			if($(elem).attr('href') == href) {
				return false;
			}
		});
		$('<link>', {
			rel: 'stylesheet',
			type: 'text/css',
			href: href
		}).appendTo('head');
	}
})(jQuery);

 

【jQuery】秒速でタブUIメニューを実装する。

まずリストタグでメニューを定義。

var tabMenu = $('<ul>', {class: 'tab-menu'});
			
tabMenu.append($('<li>', {class: 'active'}).append($('<a>', {href: '#'}).html('タブ1')));
tabMenu.append($('<li>').append($('<a>', {href: '#'}).html('タブ2')));
tabMenu.append($('<li>').append($('<a>', {href: '#'}).html('タブ3')));
tabMenu.append($('<li>').append($('<a>', {href: '#'}).html('タブ4')));
tabMenu.append($('<li>').append($('<a>', {href: '#'}).html('タブ5')));
tabMenu.append($('<li>').append($('<a>', {href: '#'}).html('タブ6')));
tabMenu.append($('<li>').append($('<a>', {href: '#'}).html('タブ7')));

次に各タブのコンテンツ要素を定義

var tabContent = $('<div>', {class: 'tab-content'});

tabContent.append($('<div>').html('コンテンツ1'));
tabContent.append($('<div>').html('コンテンツ2'));
tabContent.append($('<div>').html('コンテンツ3'));
tabContent.append($('<div>').html('コンテンツ4'));
tabContent.append($('<div>').html('コンテンツ5'));
tabContent.append($('<div>').html('コンテンツ6'));
tabContent.append($('<div>').html('コンテンツ7'));

最後に挙動実装。

var tabs = tabMenu.children();
var contents = tabContent.children();
$.each(contents, function(key, elem) {
	if(key != 0) {
		$(elem).hide();
	}
	$(tabs[key]).click(function() {
		var that = this;
		var index = 0;
		$.each(tabs, function(key) {
			if(this == that) {
				index = key;
			}
		});
		$.each(contents, function(key) {
			if(index == key) {
				$(this).show();
				$(tabs[key]).addClass('active');
			} else {
				$(this).hide();
				$(tabs[key]).removeClass('active');
			}
		});
		return false;
	});
});

完了!!うん!!簡単だね!!